我目前正在为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
关键字,并且任何类型的上下文状态都应该由解析树访问者处理?
答案 0 :(得分:1)
我是否应该正确地假设不应再使用returns关键字,并且任何类型的上下文状态都应该由解析树访问者处理?
是的,这是正确的。使用ANTLR4,您应该将所有特定于目标的代码保留在语法之外,并转移到听众/访问者中。