2013-10-03 6 views
0

Я пытался использовать ссылку на правило в грамматическом действии.antlr "java.lang.NoSuchFieldError" о действии грамматики

string_decl_list : (string_decl)+; 
string_decl  : ('STRING' id ':=' str ';') 
{//table.currentScope().define(new BaseDescriptor(), id.text, ValueType.STRING); 
System.out.println($str.text); 
}; 
str    : STRINGLITERAL; 

Моя грамматика выглядит так. Компиляция в порядке. Но когда я пытаюсь разобрать мой файл.

Существует исключение.

Exception in thread "main" java.lang.NoSuchFieldError: str 
at MicroParser.string_decl(MicroParser.java:368) 
at MicroParser.string_decl_list(MicroParser.java:312) 
at MicroParser.decl(MicroParser.java:246) 
at MicroParser.pgm_body(MicroParser.java:187) 
at MicroParser.program(MicroParser.java:107) 
at Compiler.main(Compiler.java:32) 
Java Result: 1 

Я думаю, что я делаю это правильно для ссылки на правило, может ли кто-нибудь мне помочь в этом? Я не знаю, как решить это

ответ

0

Вы получаете ошибку

Exception in thread "main" java.lang.NoSuchFieldError: str 

, потому что вы не имеете возвращаемое значение для правила синтаксического анализатора «ул».

попробовать что-то вроде этого:

str returns [String str] : STRINGLITERAL { $str = new String($STRINGLITERAL.text); } ; 
+0

Вы говорите, что сделать это в файле грамматики? Извините за задержку с ответом. –

Смежные вопросы