2014-09-26 50 views
0

我目前正在使用JavaCC,Eclipse和JTB使用解析器進行簡單的語言工作。我正在爲此進行學習。當我運行java文件它給了我下面的錯誤:「遇到」錯誤,應該不存在

Encountered " "var" "var "" at line 2, column 5. 
Was expecting: ":" ... 

但當我仔細看一下我的代碼存在於第2行?沒有這樣的事! 我知道這個錯誤不應該在那裏我已經到以前的誤差像2現在的調試時間,由於...

編輯 這是我的令牌代碼,包括「VAR」:

TOKEN : 
{ 
    < REQUIRE: "require" > 
| < IF: "if" > 
| < WHILE:"while" > 
| < VAR:"var" > 
| < STOP:"stop" > 
| < EXEC:"exec" > 
| < ELSE:"else" > 
} 

,這是 「無功」 的規則定義:

void VariableDeclaration():{} 
{ 

    "var" VariableName() "=" MathExpression() "." 
} 

void VariableAssign():{} 
{ 
    VariableName() "=" MathExpression() "." 
} 

希望這有助於:)

+1

你可以包含它正在嘗試閱讀的代碼嗎?至少第一位? – Pokechu22 2014-09-26 14:58:52

+0

@Pokechu22第一行?確定 – ANON 2014-09-26 16:04:43

+0

出現錯誤是因爲解析器在預期不包含「var」的一組令牌之一時遇到令牌「var」。如果你想要更好的答案,你必須發佈輸入文本和語法的相關部分。如果你打開解析器調試,你會看到自己正在發生的事情。 – 2014-09-26 16:06:19

回答

0

輸出此錯誤消息的原因是解析器遇到字符序列「var」,該字符序列被識別爲解析器在遇到時未處於預期狀態的標記種類。其中一種可接受的標記類型與字符序列「:」相關聯。

簡而言之,令牌序列不是用語法描述的語言。

如果你想知道更多,你應該問一個新的問題。例如。鑑於這種語法...,爲什麼這個輸入...,導致我的JavaCC生成分析器發出這個錯誤消息...。但是,在將大型文法複製到堆棧交換之前,您應該(a)自己嘗試解決問題 - 例如使用JavaCC的優秀調試選項 - 並且(b)將問題歸結爲最小的失敗示例。

+0

實際上所有的函數/關鍵字在語法中都被描述爲一種令牌類型,但它只給我一個錯誤「var」,用於定義 – ANON 2014-09-28 10:14:29

+0

我添加了語法 – ANON 2014-09-28 10:20:14