0

我正在尝试解析 Lua,它在某些情况下依赖于空格,因为它不使用大括号作为范围。我认为只有在另一个规则不匹配时才丢弃空格是最好的方法,但我不知道该怎么做。有人能帮我吗?

4

1 回答 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 回答