将属性范围从 antlr3 迁移到 antlr4
Migrating attribute scope from antlr3 to antlr4
在 ANTLR3 中 possible 使用规则 scope
块:
formUsage
scope {
Form form;
}
: formUsage1
| formUsage2
| formUsage3
;
formUsage1
: someUsage { $formUsage::form = ... ; }
...
我们的语法中有很大一部分是作用于一个特定对象的。 scope
块是一个很好的功能,用于在特定规则和所有子规则中实现一些公共状态。或者,我们可以将此公共状态作为参数传递给所有子规则或将其放入全局 @parser::members
。但是 scope
块正是我们所需要的。
将这些块迁移到 ANTLR4 的更好方法是什么?
您现在可能想要的是当地人,他们是 Rule Attribute Definitions 的一部分。 ANTLR4 中解析器规则的语法是:
rulename[args] returns [retvals] locals [localvars] : ... ;
locals
部分保持原样,未被 ANTLR4 解析。这允许那里有任何目标特定代码。
在 ANTLR3 中 possible 使用规则 scope
块:
formUsage
scope {
Form form;
}
: formUsage1
| formUsage2
| formUsage3
;
formUsage1
: someUsage { $formUsage::form = ... ; }
...
我们的语法中有很大一部分是作用于一个特定对象的。 scope
块是一个很好的功能,用于在特定规则和所有子规则中实现一些公共状态。或者,我们可以将此公共状态作为参数传递给所有子规则或将其放入全局 @parser::members
。但是 scope
块正是我们所需要的。
将这些块迁移到 ANTLR4 的更好方法是什么?
您现在可能想要的是当地人,他们是 Rule Attribute Definitions 的一部分。 ANTLR4 中解析器规则的语法是:
rulename[args] returns [retvals] locals [localvars] : ... ;
locals
部分保持原样,未被 ANTLR4 解析。这允许那里有任何目标特定代码。