我试图解析Lua,在某些情况下依赖于空格,因为它不使用大括号作为范围。我认为只有当另一条规则不匹配时抛出空白是最好的方法,但我不知道如何做到这一点。有人能帮助我吗?
答案 0 :(得分:1)
查看Lua's documentation,我认为无需考虑空格。
解析器规则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维基上有一个Lua语法:http://www.antlr.org/grammar/1178608849736/Lua.g
似乎我对if语句的建议与上面的语法略有不同:
'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end'
正如你所看到的那样,是正确的。