Antlr4中语义谓词的语法

kay*_*kay 10 antlr antlr4

什么是ANTLR3中的"语义谓词"?Bart Kiers非常清楚地概述了Antlr3中的不同语义谓词.

太糟糕了,Antlr4中的语法/语义似乎有所改变,所以这不会编译:

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

RBRACE
    : '}'
    ;
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何处理end_of_statement的第三种情况:如果下一个标记是'}'但不消耗它,则接受.

Bar*_*ers 14

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

{ <<boolean-epxression>> }?
Run Code Online (Sandbox Code Playgroud)

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

那么,在您的情况下,以下ANTLR v3语法:

{input.LT(1).getType() == RBRACE}? =>
Run Code Online (Sandbox Code Playgroud)

在ANTLR v4中看起来像这样:

{_input.LT(1).getType() == RBRACE}?
Run Code Online (Sandbox Code Playgroud)