ANTLR4:对多个备选方案重用规则可选标签会导致规则元素不出现在上下文类中

  • 本文关键字:规则 元素 上下文 方案 ANTLR4 标签 antlr4
  • 更新时间 :
  • 英文 :


我有一个表达式规则,如下所示:

expression : '(' expression ')'   # ParenthesizedExpression
| literal                  # LiteralExpression
| identifier               # IdentifierExpression
| functionCall             # FunctionCallExpression
| Minus expression         # UnaryNumericExpression
| Not expression           # LogicalNotExpression
| expression Caret<assoc=right> expression           # BinaryNumericExpression
| expression (Times|DividedBy|ModuloDiv) expression  # BinaryNumericExpression
| expression (Plus|Minus) expression                 # BinaryNumericExpression
| expression '='<assoc=right> expression             # AssignmentExpression
| expression PlusEquals<assoc=right> expression      # AssignmentExpression
| expression MinusEquals<assoc=right> expression     # AssignmentExpression
| expression TimesEquals<assoc=right> expression     # AssignmentExpression
| expression DivdedByEquals<assoc=right> expression  # AssignmentExpression
| expression ModuloEquals<assoc=right> expression    # AssignmentExpression
;

BinaryNumericExpressionAssignmentExpression的规则标签仅为侦听器创建一组enterXXXexitXXX方法,如预期的那样。 但是,生成的关联上下文类(AssignmentExpressionContextBinaryNumericExpressionContext)仅包括每个相应标签的最后一个实例的规则组件的方法。 例如,我的规则中BinaryNumericExpression标签的最后一次用法是用于expression (Plus|Minus) expression。因此,BinaryNumericExpressionContext类只有方法Plus()Minus()。明显缺失的是Caret()Times()DividedBy()ModuloDiv()。在AssignmentExpressionContext类中找到类似的方案,仅找到一个ModuloEquals()方法。

我的问题是:1)这是一个错误还是"按设计工作"?2) 我是否必须为每个规则备选方案创建一个单独的标签,以便能够检查匹配的运算符?

这是一个错误。当我实现用于生成上下文访问器方法的分析算法时,我不知道这是一个受支持的案例。您应该在项目问题跟踪器上提交错误报告。

https://github.com/antlr/antlr4/issues

相关内容

  • 没有找到相关文章

最新更新