Antlr 检测存在多个规则时匹配的规则

Antlr 检测存在多个规则时匹配的规则,antlr,antlr4,Antlr,Antlr4,我有一个antlr4规则,有两种可能的扩展: expr := term + term | term * term ; 我想写一个访问该规则的访问者: public T visitExpr (MyParser.ExprContext ctx) { ... } 在内部visitExpr如何检测匹配的扩展规则?标记与感兴趣的子规则不同的内容: expr : term p=PLUS term | term m=MUL term ; 或者标记子规则 expr : term P

我有一个antlr4规则,有两种可能的扩展:

expr := term + term | term * term ;
我想写一个访问该规则的访问者:

public T visitExpr (MyParser.ExprContext ctx) { ... }

在内部
visitExpr
如何检测匹配的扩展规则?

标记与感兴趣的子规则不同的内容:

expr : term p=PLUS term 
     | term m=MUL term 
     ;
或者标记子规则

expr : term PLUS term #plus
     | term MUL term  #mult
     ;

在前者中,标签将在
expr
上下文中表示为标记,其中一个为空,这意味着另一个子规则是匹配的。在后者中,标记的子规则将分别表示为单独的上下文,因此区分匹配的子规则是明确的。