2013-06-13 163 views
4

我以前發佈關於我在使用ANTLR時遇到左遞歸問題時的第一次嘗試。ANTLR錯誤(99)語法沒有規則

現在,我已經解決了這些問題,我收到以下錯誤,當我嘗試使用org.antlr.v4.Tool生成代碼:

error(99): C:test.g4::: grammar 'test' has no rules 

什麼是此錯誤的可能原因?使用ANTLRWorks我當然可以在Parse Tree中看到規則,所以爲什麼不能看到它們?是否因爲找不到合適的START規則?

+0

那麼,如果你解決了你以前的問題,你可以在那裏發佈答案/解決方案,或者刪除問題嗎? –

+0

您可以發佈語法,並準確地發佈您如何使用'Tool'生成分析器/詞法分析器類? –

+0

您可能在導致ANTLR停止解析的文件中出現語法錯誤。你能通過(幷包括)第一條規則發佈你的語法嗎? –

回答

0

最可能的原因正是錯誤消息的含義。最可能的原因是您沒有將語法保存到文件中 - 或者如果您使用ANTLRWorks2- ANTLRWorks尚未將您的工作保存到文件中。我不知道爲什麼ANTLRWorks不能可靠地保存。

+0

您的評論*「我不知道爲什麼ANTLRWorks不能可靠地保存」*,您認爲它是ANTLWorks故障而不是OP。我敢打賭,這是另一回事。 –

+0

我說ANTLRWorks不能可靠地保存,因爲它對我有用,這就是我如何知道OP的問題的可能答案。 – Roy

+0

你的推理是不正確的。它是一個**答案,當我第一次遇到錯誤(99)時,我看到它會是答案。鑑於文件保存問題在ANTLRWorks2中很容易重現,它甚至 - 正如我所說 - 可能的答案。順便說一句,只有我提到了ANTLRWorks2。我們是否談論過相同的軟件?澄清。 – Roy

1

我剛剛得到了這個錯誤(antlworks 2.1)。 從分解規則(即從大寫到小寫)從 RULE : THIS | THAT ;rule : this | that ;的切換解決了問題!

編輯 上述修正僅供RULE持有,什麼:後可如下的詞法/語法規則的任意組合

2

我不知道你是否已經找到了解決的辦法,但我遇到了同樣的問題,並通過將我的開始符號更改爲'prog'來修復它。因此,例如,您.g4文件的前兩行是:

grammar test; 
    prog : <...> ; 

凡< ...>將是你的第一個推導。

1

我認爲Antlr希望第一個規則名稱是小型的。我得到了同樣的錯誤與我的語法

grammar ee; 
Condition : LogicalExpression ; 
LogicalExpression : BooleanLiteral ; 
BooleanLiteral : True ; 
True : 'true' ; 

通過改變語法的第一個生產規則下情況下,它解決了這個問題,即下面的語法爲我工作。

grammar ee; 
condition : LogicalExpression ; 
LogicalExpression : BooleanLiteral ; 
BooleanLiteral : True ; 
True : 'true' ; 

注意:這是我個人的解釋,我無法在在線文檔中找到這個推理。

+0

我遇到了同樣的問題。我認爲語法規則的名稱(也就是非終端規則)必須全部小寫。 – smwikipedia

0

我也得到了同樣的錯誤,但無法修復它。 我下載了antlrworks-1.4.jar它的工作完美。

下載>>antlrworks-1.4.jar

0

改變第一規則,並開始以小寫字符爲我工作。