ANTLR4 - 使用上下文访问序列中的令牌组
ANTLR4 - Access token group in a sequence using context
我有一个包含这条规则的语法:
expr:
unaryExpr '(' (stat | expr | constant) ')' #labelUnaryExpr
| binaryExpr '(' (stat | expr | constant) ',' (stat | expr | constant) ')' #labelBinaryExpr
| multipleExpr '(' (stat | expr | constant) (',' (stat | expr | constant))+ ')' #labelMultipleExpr
;
对于 expr
,我可以通过调用 ctx.unaryStat()
来访问 unaryExpr
的值。我怎样才能类似地访问(stat | expr | constant)
?有没有不需要通过为组添加另一个规则来修改我的语法的解决方案?
由于您已经标记了备选方案,因此您可以在其各自的 listener/visitor 方法中访问 (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());
}
我有一个包含这条规则的语法:
expr:
unaryExpr '(' (stat | expr | constant) ')' #labelUnaryExpr
| binaryExpr '(' (stat | expr | constant) ',' (stat | expr | constant) ')' #labelBinaryExpr
| multipleExpr '(' (stat | expr | constant) (',' (stat | expr | constant))+ ')' #labelMultipleExpr
;
对于 expr
,我可以通过调用 ctx.unaryStat()
来访问 unaryExpr
的值。我怎样才能类似地访问(stat | expr | constant)
?有没有不需要通过为组添加另一个规则来修改我的语法的解决方案?
由于您已经标记了备选方案,因此您可以在其各自的 listener/visitor 方法中访问 (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());
}