首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用BNF

尝试使用BNF
EN

Stack Overflow用户
提问于 2017-10-30 22:50:22
回答 1查看 253关注 0票数 0

我正在尝试使用BNF表示法。我在https://www.lua.org/manual/5.3/manual.html#9上看到了Lua5.3的完整语法。我想用{替换dothen,用}替换end

代码语言:javascript
复制
stat ::=  ‘;’ | 
         varlist ‘=’ explist | 
         functioncall | 
         label | 
         break | 
         goto Name | 
         do block end |                                                  -> { block } 
         while exp do block end |                                        -> while exp { block }
         repeat block until exp |  
         if exp then block {elseif exp then block} [else block] end |    -> if exp { block .... } 
         for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end |               -> for ........  { block }  
         for namelist in explist do block end |                          -> for ........  { block }
         function funcname funcbody | 
         local function Name funcbody | 
         local namelist [‘=’ explist] 

funcbody ::= ‘(’ [parlist] ‘)’ block end                                  ->  ...........  { block }

如何使用上面修改过的语法来创建解释器?这能行得通吗?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-10-30 23:34:27

then替换为{,将end替换为}与表构造函数冲突:

代码语言:javascript
复制
if a then print(1) end

变成了

代码语言:javascript
复制
if a { print(1) }

相反,

代码语言:javascript
复制
a = {}

变成了

代码语言:javascript
复制
a = then end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47018204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档