使用 BNF 进行实验

我正在尝试使用 BNF 符号进行实验。我在 https://www.lua.org/manual/5.3/manual.html#9 看到了 Lua5.3 的完整语法。我想把 do 替换为 {,把 end 替换为 }

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 }

我如何使用以上修改后的语法创建解释器?这可行吗?谢谢您的帮助。

点赞
用户107090
用户107090

{代替then}代替end会与表构造器发生冲突:

如果 a 那么打印(1) 结束

变成

如果 a { 打印(1) }

反之,

a = {}

变成

a = then end
2017-10-30 15:34:27