删除空格,但最后这样做?

时间:2009-12-10 03:17:37

标签: whitespace antlr lexer

我试图解析Lua,在某些情况下依赖于空格,因为它不使用大括号作为范围。我认为只有当另一条规则不匹配时抛出空白是最好的方法,但我不知道如何做到这一点。有人能帮助我吗?

1 个答案:

答案 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'
正如你所看到的那样,

是正确的。