parsing - init_declarator is a non-unique reference Antlr? -


i starting symbol table, still new facing errors given antlr in reference init_declarator rule. tips please

declaration     : declaration_specifiers init_declarator_list? semicolon! {currentscope.definevariable($init_declarator_list.name,$declaration_specifier.type);}      ;    declaration_specifiers returns [symbol type]     :   ( type_specifier{$type = $type_specifier.type;} |type_qualifier)+     ;  init_declarator_list returns [symbol name]      : init_declarator (comma init_declarator)*{$name = $init_declarator.name;} -> ^(init_declarator_list init_declarator+)     ;  init_declarator returns [symbol name]     : declarator (assign^ initializer)?  {$name = $declarator.name;}     ;  declarator returns [symbol name]     : pointer? direct_declarator{$name = $direct_declarator.text;}     | pointer     ;  direct_declarator returns [symbol name]     :   (   identifier| lparen! declarator rparen!   )          declarator_suffix* {$name = $identifier.text;}     ;    type_specifier returns [symbol type] : (const^)? (void{return voidtype;} | char {return chartype;}| int{return inttype;} | float{return floattype;} ); 

the error has following rule:

init_declarator_list returns [symbol name]      : init_declarator (comma init_declarator)*{$name = $init_declarator.name;} -> ^(init_declarator_list init_declarator+)     ; 

in action, $init_declarator.name referring either first or second reference init_declarator in rule. try labeling 1 want use. example, in following rule i've labeled both references x=, action $x.name refer whatever last init_declarator was.

init_declarator_list returns [symbol name]      : x=init_declarator (comma x=init_declarator)*{$name = $x.name;} -> ^(init_declarator_list init_declarator+)     ; 

Comments