我的语法包含这条规则:
expr:
unaryExpr '(' (stat | expr | constant) ')' #labelUnaryExpr
| binaryExpr '(' (stat | expr | constant) ',' (stat | expr | constant) ')' #labelBinaryExpr
| multipleExpr '(' (stat | expr | constant) (',' (stat | expr | constant))+ ')' #labelMultipleExpr
;
对于expr
,我可以通过调用unaryExpr
来访问ctx.unaryStat()
的值。我怎样才能同样访问(stat | expr | constant)
?是否有一个解决方案不需要通过为该组添加另一个规则来修改我的语法?
答案 0 :(得分:2)
由于您已为自己标记了替代方案,因此可以在其各自的侦听/访问者方法中访问(stat | expr | constant)
:
@Override
public void enterLabelUnaryExpr(@NotNull ExprParser.LabelUnaryExprContext ctx) {
// one of these will return something other than null
System.out.println(ctx.stat());
System.out.println(ctx.expr());
System.out.println(ctx.constant());
}