如何将CommonTree参数传递给Antlr规则

如何将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

我正在尝试做我认为是传递给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    : '$'! 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;
}