Antlr4中语义谓词的语法

时间:2012-10-05 15:17:03

标签: antlr antlr4

What is a 'semantic predicate' in ANTLR3?中,Bart Kiers概述了Antlr3中的不同语义谓词。

在Antlr4中,语法/语义似乎发生了变化,太糟糕了,所以这不会编译:

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

RBRACE
    : '}'
    ;

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

1 个答案:

答案 0 :(得分:14)

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

{ <<boolean-epxression>> }?

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

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

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

在ANTLR v4中会是这样的:

{_input.LT(1).getType() == RBRACE}?