在ANTLR3中什么是"语义谓词"?Bart Kiers很好地概述了Antlr3中的不同语义谓词。
太糟糕了,语法/语义在 Antlr4 中似乎发生了变化,所以这无法编译:
end_of_statement
: ';'
| EOF
| {input.LT(1).getType() == RBRACE}? =>
;
RBRACE
: '}'
;
有人可以告诉我如何做第三种end_of_statement情况:如果下一个令牌是"}",则接受但不使用它。
现在只有一种类型的语义谓词,如下所示:
{ <<boolean-epxression>> }?
抽象类 Parser
(生成的解析器从中扩展)的 input
属性现在前面有一个下划线。
因此,在您的情况下,以下 ANTLR v3 语法:
{input.LT(1).getType() == RBRACE}? =>
在 ANTLR v4 中看起来像这样:
{_input.LT(1).getType() == RBRACE}?