Antlr4中语义断言的语法

13
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个回答

17

现在只有一种语义谓词类型,它看起来像这样:

{ <<boolean-epxression>> }?

在抽象类Parser中,input属性现在前面有一个下划线。

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

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

在ANTLR v4中,将会长成这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接