0
我越來越想對樣本(語法上有效的)文件運行用JavaCC的解析器,當這個錯誤之一:的JavaCC:遇到...期待...的錯誤
Exception in thread "main" ParseException: Encountered "8;" at line 13, column 17.
Was expecting one of:
<INT_CONST> ...
"<" ...at jimpleParser.generateParseException(jimpleParser.java:2421)
at jimpleParser.jj_consume_token(jimpleParser.java:2292)
at jimpleParser.expr(jimpleParser.java:1038)
(縮短爲簡潔起見)
我無法弄清楚它爲什麼會拋出一個錯誤。 「8」應該是一個有效的標記。下面是有問題的功能:
String expr():
{
Token t1 = null, t2 = null;
String f1 = null, f2 = null, f3 = null;
}
{
(LOOKAHEAD(3)
f1 = imm() {System.out.println(f1);}
| f1 = new_expr()
| t1 = <LBR> f2 = nonvoid_type() t2 = <RBR> f3 = imm()
{f1 = t1.image.concat(f2.concat(t2.image.concat(f3)));}
| LOOKAHEAD(2)
f2 = imm() t1 = <INSTANCEOF> f3 = nonvoid_type()
{f1 = f2.concat(t1.image.concat(f3));}
| f1 = invoke_expr()
| LOOKAHEAD(2)
f1 = reference()
| LOOKAHEAD(2)
f1 = binop_expr()
| f1 = unop_expr())
{return f1;}
}
應反過來這裏示出呼叫IMM:應反過來這裏示出呼叫恆定
String imm():
{
String f1 = null;
}
{
(f1 = constant()
| f1 = local_name())
{return f1;}
}
:
String constant():
{
Token t1 = null, t2 = null;
String f1 = null;
}
{
(t1 = <INT_CONST> {f1 = t1.image; System.out.println(f1);}
| t1 = <FLOAT_CONST> {f1 = t1.image;}
| t1 = <MIN_INT_CONST> {f1 = t1.image;}
| t1 = <MIN_FLOAT_CONST> {f1 = t1.image;}
| t1 = <STRING_CONST> {f1 = t1.image;}
| t1 = <CLASS> t2 = <STRING_CONST> {f1 = t1.image.concat(t2.image);}
| t1 = <NULL> {f1 = t1.image;})
{return f1;}
}
8應該是一個INT_CONST。相關令牌規格如下:
<INT_CONST: ((<OCT_CONST> | <DEC_CONST> | <HEX_CONST>) ("L")?)>
<DEC_CONST: (<DEC_DIGIT>)+>
<DEC_DIGIT: ["0"-"9"]>
任何幫助將不勝感激。謝謝
謝謝。我瀏覽了一下並做了一些修改,但仍然遇到同樣的錯誤。我看不到它是哪個標記。我能否提供整個令牌列表? – user3046692
嘗試開啓令牌管理器調試。在選項中設置DEBUG_TOKEN_MANAGER = true;'。當你這樣做時,我相信你會看到問題。如果你仍然無法看到它,請發佈一個指向你的.jj文件的鏈接,我會盡可能地看一看。 –