How to pass CommonTree parameter to Antlr rule

I am trying to do what, in my opinion, is a simple parameter passing the rule in 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' | '_' )* ; 

So inner[CommonTree parent] generates the following:

 inner4=inner((outer_id2!=null?((Object)outer_id2.tree):null)); 

leads to this error:

 The method inner(CommonTree) in the type rule_paramsParser is not applicable for the arguments (Object) 

As far as I can tell, this is the same as the example in the Antrl book:

 classDefinition[CommonTree mod] 

(Kindle Location 3993) - Sorry, I don’t know the page number, but it’s in the middle of the book in chapter 9 of the section with the inscription “Creating nodes with arbitrary actions”.

Thanks for any help.

M

+4
source share
1 answer

If you do not explicitly specify the tree to be used in your grammar, .tree (which is less for getTree() ) will return java.lang.Object , and CommonTree will use the default Tree implementation. To avoid casting, set the tree type in the options { ... } section options { ... } :

 options { output=AST; ASTLabelType=CommonTree; } 
+3
source

All Articles