关于语法动作的antlr“java.lang.NoSuchFieldError”

时间:2013-10-03 01:27:53

标签: java parsing exception-handling antlr4

我试图在语法操作中使用规则引用。

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

我想我正在为规则参考做正确的事,有人可以帮我解决这个问题吗?我不知道如何解决它

1 个答案:

答案 0 :(得分:0)

您收到错误

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

因为您没有解析器规则“str”的返回值。

尝试这样的事情:

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