2013-05-05 2 views
1

Я начинаю свою таблицу символов, но все же новичок в ней, но сталкиваюсь с некоторыми ошибками, данными antlr в отношении моего правила init_declarator. Любые советы, пожалуйстаinit_declarator является уникальной ссылкой Antlr?

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;}); 

ответ

2

ошибка имеет отношение к следующему правилу:

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

В вашем действии, $init_declarator.name может ссылаться на первый или второй ссылкой на init_declarator в правиле. Попробуйте пометить тот, который вы хотите использовать. Например, в следующем правиле я обозначил обе ссылки с помощью x=, поэтому действие $x.name будет ссылаться на то, что было последним init_declarator.

init_declarator_list returns [Symbol name] 
    : x=init_declarator (COMMA x=init_declarator)*{$name = $x.name;} -> ^(INIT_DECLARATOR_LIST init_declarator+) 
    ; 
+0

Большое вам спасибо; решил мою проблему. – Undisputed007