ANTLR4:当我试图找到哪个解析器子规则匹配时出错

时间:2013-07-25 17:26:55

标签: antlr antlr4

我有一个像这样的解析器规则,我需要知道哪个子规则匹配:

dt returns [DT v]
:    (d1=date t1=time?|t2=time d2=date?)
                 {if ($d1 == null) // right side matched ... }
;

我收到一条ANTLR4错误消息:“'$ d1'中规则参考'd1'缺少属性访问权限。”

我可以通过举例来摆脱这个错误$d1.v,但是我在运行时在ANTLR生成的代码中得到NullPointerException

if (((DtrContext)_localctx).d1.v != null)

因为_localctx.d1为null,所以_localtx.d1.v使用null ptr。

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

d1的上下文对象(DateContext类型的解析树节点)可以使用$d1.ctx引用。这相当于你单独假设的$d1