13

什么是 ANTLR3 中的“语义谓词”?Bart Kiers 很好地概述了 Antlr3 中的不同语义谓词。

太糟糕了,Antlr4 中的语法/语义似乎发生了变化,因此无法编译:

end_of_statement
    :   ';'
    |   EOF
    |   {input.LT(1).getType() == RBRACE}? =>
    ;

RBRACE
    : '}'
    ;

有人可以告诉我如何处理end_of_statement的第三种情况:如果下一个令牌是 '}' 则接受,但不要使用它。

4

1 回答 1

16

现在只有一种语义谓词,如下所示:

{ <<boolean-epxression>> }?

抽象类的input属性Parser(生成的解析器从中扩展)现在前面有一个下划线。

因此,在您的情况下,以下 ANTLR v3 语法:

{input.LT(1).getType() == RBRACE}? =>

在 ANTLR v4 中看起来像这样:

{_input.LT(1).getType() == RBRACE}?
于 2012-10-05T18:08:35.127 回答