在ANTLR3中使用规则scope
块是possible:
formUsage
scope {
Form form;
}
: formUsage1
| formUsage2
| formUsage3
;
formUsage1
: someUsage { $formUsage::form = ... ; }
...
我们有一些语法的大部分可以在一个特定的对象上运行。 scope
块是在特定规则和所有子规则中实现某些公共状态的一个很好的功能。或者,我们可以将此公共状态作为参数传递给所有子规则或将其放入全局@parser::members
。但scope
阻止正是我们所需要的。
将此块迁移到ANTLR4的更好方法是什么?
答案 0 :(得分:1)
您现在可能想要的是本地人,这是Rule Attribute Definitions的一部分。 ANTLR4中解析器规则的语法是:
rulename[args] returns [retvals] locals [localvars] : ... ;
locals
部分保留为给定,而不是由ANTLR4解析。这允许在那里使用任何特定于目标的代码。