关键字"返回"在ANTLR4中

时间:2014-07-23 17:36:33

标签: antlr3 antlr4

我目前正在为ANTLR4调整几个ANTLR3语法文件。一些旧的ANTLR3规则使用returns关键字。此规则在ANTLR3和ANTLR4中均有效:

aRule:
  returns [String s]

  anotherRule AND (aRule)?
  {
      $s = "foo";
  }
;

...

在ANTLR3解析器上调用parser.aRule()会返回String。在ANTLR4解析器上调用parser.aRule()会返回RuleContext。 ANTLR4中的returns关键字纯粹是出于向后兼容的目的吗?显然,在这两种情况下,返回都会导致将公共字段String s添加到生成的ARuleContext

我是否应该正确地假设不应再使用returns关键字,并且任何类型的上下文状态都应该由解析树访问者处理?

1 个答案:

答案 0 :(得分:1)

  

我是否应该正确地假设不应再使用returns关键字,并且任何类型的上下文状态都应该由解析树访问者处理?

是的,这是正确的。使用ANTLR4,您应该将所有特定于目标的代码保留在语法之外,并转移到听众/访问者中。