如何在parenthesesn中定义替代标签

时间:2017-11-07 05:49:27

标签: antlr4

这是我的解析器语法的一部分:

expression: 
    multiplyingExpression
   (
   PLUS multiplyingExpression  #plus
   | MINUS multiplyingExpression #minus 
   )*;

我想定义加号和减号替代标签,显然它不允许我这样做。

在#plus和@minus它给了我错误:

在寻找规则元素

时错过了'#'的RPAREN

有人知道如何在不改变这条规则定义的结构的情况下实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

alt标签只能在alt的外边缘(非嵌套)上定义。因此,如果不改变规则的结构就无法完成。

可以做的是使用普通标签有效地达到预期效果。

expression: 
    multiplyingExpression
    ( type+=PLUS  multiplyingExpression
    | type+=MINUS multiplyingExpression
    )*;

结果是ExpressionContext将包含List<Token> type;,其连续值将通过推断识别匹配的alts。