如何检查ANTLR4规则是否为空?

时间:2014-03-23 18:54:48

标签: java antlr antlr4

我尝试这个(它只是一个例子):

foo:
  bar?
  { if ($bar == null) { ... } }
  ;

ANTLR4编译器说:

Message{errorType=ISOLATED_RULE_REF, args=[bar, $bar] ...

解决方法是什么?

2 个答案:

答案 0 :(得分:2)

理想情况下,您在上面编写的操作将放在解析完成后使用的侦听器的exitFoo方法中。

但是,如果您确实在语法中保留了操作,要引用上下文对象本身,请使用ctx属性。例如,$bar.ctx是您在此处尝试使用的表达式,$ctx计算封闭规则的上下文对象。

答案 1 :(得分:2)

您是否看过常见问题How do I test if an optional rule was matched?;)