删除空格,但最后删除空格吗?
问题描述:
我试图解析Lua,它在某些情况下依赖于空白,因为它没有为范围使用大括号。我认为只有在另一个规则不匹配时才抛出空白是最好的方法,但我不知道如何做到这一点。有人能帮我吗?删除空格,但最后删除空格吗?
答
看着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
没有必要采取空间考虑进去,据我所知。所以你可以在你的文法中加上:
Space
: (' ' | '\t' | '\r' | '\n'){$channel=HIDDEN;}
;
。
编辑
似乎有在ANTLR维基Lua的语法:http://www.antlr.org/grammar/1178608849736/Lua.g
而且似乎我我的一个建议,如果声明中略微从上面的语法不同:
'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end'
这是正确的,你可以看到。
我没有Lua的经验,所以你可能举一个例子,当一个空格不能被忽略(或放在'$ channel = HIDDEN')? – 2009-12-10 09:06:34
举例来说,你的if语句就是这样的:'if'*'condition' *'then'*'block' *'end'并且空格是重要的,这样可以正确读取识别字。 – RCIX 2009-12-10 10:23:00