我正在尝试解析 Lua,它在某些情况下依赖于空格,因为它不使用大括号作为范围。我认为只有在另一个规则不匹配时才丢弃空格是最好的方法,但我不知道该怎么做。有人能帮我吗?
问问题
432 次
1 回答
1
查看Lua 的文档,我认为没有必要考虑空格。
解析器规则ifStatement
:
ifStatement
: 'if' exp 'then' block ('elseif' exp 'then' block 'else' block)? 'end'
;
exp
: /* todo */
;
block
: /* todo */
;
应该同时匹配:
if j==10 then print ("j equals 10") end
和:
if j<10 then
print ("j < 10")
elseif j>100 then
print ("j > 100")
else
print ("j >= 10 && j <= 100")
end
AFAIK,无需考虑空格。所以你可以添加:
Space
: (' ' | '\t' | '\r' | '\n'){$channel=HIDDEN;}
;
在你的语法中。
编辑
ANTLR wiki 上似乎有 Lua 语法:http ://www.antlr.org/grammar/1178608849736/Lua.g
看来我对 if 语句的建议与上面的语法略有不同:
'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end'
如您所见,这是正确的。
于 2009-12-10T11:15:20.503 回答