我有一个这样的解析器规则,我需要知道匹配哪个子规则:
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。
关于我如何解决这个僵局,有什么想法吗?
d1
的上下文对象(类型为DateContext
的解析树节点)可以用$d1.ctx
引用。这相当于您假设单独使用$d1
即可完成的操作。