我正在尝试使用BNF表示法。我在https://www.lua.org/manual/5.3/manual.html#9上看到了Lua5.3的完整语法。我想用{替换do和then,用}替换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 }如何使用上面修改过的语法来创建解释器?这能行得通吗?谢谢你的帮助。
发布于 2017-10-30 23:34:27
将then替换为{,将end替换为}与表构造函数冲突:
if a then print(1) end变成了
if a { print(1) }相反,
a = {}变成了
a = then endhttps://stackoverflow.com/questions/47018204
复制相似问题