我有一个表达式规则,如下所示:
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
;
BinaryNumericExpression
和AssignmentExpression
的规则标签按预期为侦听器创建了一组enterXXX
和exitXXX
方法。但是,生成的关联上下文类(AssignmentExpressionContext
和BinaryNumericExpressionContext
)仅包括每个相应标签的最后一个实例的规则组件的方法。例如,我的规则中BinaryNumericExpression
标签的最后一次使用是expression (Plus|Minus) expression
。因此,BinaryNumericExpressionContext
类只有方法Plus()
和Minus()
。明显缺少的是Caret()
,Times()
,DividedBy()
和ModuloDiv()
。找到AssignmentExpressionContext
类的类似场景,只找到ModuloEquals()
方法。
我的问题是:1)这是一个错误还是“按设计工作”? 2)我是否必须为每个规则备选方案创建单独的标签,以便能够检查哪个运营商匹配?
答案 0 :(得分:2)
这是一个错误。当我实现用于生成上下文访问器方法的分析算法时,我不知道这是一个支持的案例。您应该在项目问题跟踪器上提交错误报告。