有没有办法知道 ANTLR 解析器当前处于哪个替代规则?
Is there a way to know which alternative rule ANTLR parser is currently in?
我想知道 antlr 中当前有哪个替代规则。我读过“the definitivie antlr4 reference”,它使用 ctx.getChildCount() 或 ctx.ID()!=null 来了解哪个替代规则规则 antlr 当前在。
但是我想知道有没有一种方法可以给出备选规则的具体索引
我看到了这个问题 ,但没有答案。
要么使用 alt labels to know in which alternative you are, or try to use options {contextSuperClass=org.antlr.v4.runtime.RuleContextWithAltNum;}
(link),但这可能不是您想要的。 contextSuperClass
只会在子规则中告诉您其父规则中的索引是什么:
parent
: child_a
| child_b
| child_c
| child_d
| child_e
;
child_d
: ... // in a listener, you can now get index 3 from the parent context
;
所以你不能这样做:
parent
: child_a
| child_b
| child_c
| child_d // get index 3 here
| child_e
;
请注意,contextSuperClass
仅在 Java 中可用,通过查看 link 中的注释似乎可以看出:“我只将 Java 运行时因为我确定我是唯一一个真正会使用它的人。"
我想知道 antlr 中当前有哪个替代规则。我读过“the definitivie antlr4 reference”,它使用 ctx.getChildCount() 或 ctx.ID()!=null 来了解哪个替代规则规则 antlr 当前在。
但是我想知道有没有一种方法可以给出备选规则的具体索引
我看到了这个问题
要么使用 alt labels to know in which alternative you are, or try to use options {contextSuperClass=org.antlr.v4.runtime.RuleContextWithAltNum;}
(link),但这可能不是您想要的。 contextSuperClass
只会在子规则中告诉您其父规则中的索引是什么:
parent
: child_a
| child_b
| child_c
| child_d
| child_e
;
child_d
: ... // in a listener, you can now get index 3 from the parent context
;
所以你不能这样做:
parent
: child_a
| child_b
| child_c
| child_d // get index 3 here
| child_e
;
请注意,contextSuperClass
仅在 Java 中可用,通过查看 link 中的注释似乎可以看出:“我只将 Java 运行时因为我确定我是唯一一个真正会使用它的人。"