在https://stackoverflow.com/questions/3056441/what-is-a-semantic-predicate-in-antlr3中,Bart很好地概述了Antlr3中不同的语义谓词。
遗憾的是,在Antlr4中语法/语义似乎发生了变化,因此这不能编译:
end_of_statement
: ';'
| EOF
| {input.LT(1).getType() == RBRACE}? =>
;
RBRACE
: '}'
;请有人告诉我如何执行end_of_statement的第三种情况:如果下一个令牌是'}‘,请接受它,但不要使用它。
发布于 2012-10-05 18:08:35
现在只有一种类型的语义谓词,如下所示:
{ <<boolean-epxression>> }?现在,来自抽象类input属性的Parser (您生成的解析器是从它扩展的)前面有一个下划线。
因此,在您的示例中,使用以下ANTLR v3语法:
{input.LT(1).getType() == RBRACE}? =>在ANTLR v4中如下所示:
{_input.LT(1).getType() == RBRACE}?https://stackoverflow.com/questions/12749230
复制相似问题