如何将CommonTree参数传递给Antlr规则
我正在尝试做我认为是传递给Antlr 3.3中规则的简单参数:如何将CommonTree参数传递给Antlr规则,antlr,Antlr,我正在尝试做我认为是传递给Antlr 3.3中规则的简单参数: grammar rule_params; options { output = AST; } rule_params : outer; outer: outer_id '[' inner[$outer_id.tree] ']'; inner[CommonTree parent] : inner_id '[' ']'; outer_id : '#'! ID; inner_id
grammar rule_params;
options
{
output = AST;
}
rule_params
: outer;
outer: outer_id '[' inner[$outer_id.tree] ']';
inner[CommonTree parent] : inner_id '[' ']';
outer_id : '#'! ID;
inner_id : '$'! ID ;
ID : ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_' )* ;
因此,内部[CommonTree父级]
生成以下内容:
inner4=inner((outer_id2!=null?((Object)outer_id2.tree):null));
导致此错误的原因:
The method inner(CommonTree) in the type rule_paramsParser is not applicable for the arguments (Object)
据我所知,这与Antll书中的示例完全相同:
classDefinition[CommonTree mod]
< P>(Kindle位置3993)-抱歉,我不知道页码,但是它在第9章的书的中间,标记为“创建具有任意动作的节点”。
谢谢你的帮助
M如果没有明确指定要在语法中使用的树,
.tree
(它是getTree()
的缩写)将返回一个java.lang.Object
,而CommonTree
将用作默认的tree
实现。要避免强制转换,请在选项{…}
部分中设置树的类型:
options
{
output=AST;
ASTLabelType=CommonTree;
}