2013-11-28 25 views
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"]> 

任何幫助將不勝感激。謝謝

回答

0

請注意,它不是造成問題的「8」,而是「8」。雖然「8」是一個INT_CONST,「8;」不是。因此,最長的匹配規則是踢進和其他符合「8」的標記生產。贏了。請參閱FAQ http://www.engr.mun.ca/~theo/JavaCC-FAQ/問題3.3。在沒有看到所有.jj文件的情況下,我無法告訴您它是哪個標記,但是如果您在構建錯誤消息的代碼上放置斷點,則可以輕鬆查看意外標記的.kind字段的內容。

+0

謝謝。我瀏覽了一下並做了一些修改,但仍然遇到同樣的錯誤。我看不到它是哪個標記。我能否提供整個令牌列表? – user3046692

+0

嘗試開啓令牌管理器調試。在選項中設置DEBUG_TOKEN_MANAGER = true;'。當你這樣做時,我相信你會看到問題。如果你仍然無法看到它,請發佈一個指向你的.jj文件的鏈接,我會盡可能地看一看。 –

相關問題