2014-06-28 49 views
1

我是ANTLR和ANTLRWorks的新手,所以我對此感到困惑: 我使用ANTLRWorks 2.1進行語法創建和隨後的詞法分析器創建,解析器(Java目標)。然後,我創建了一個小型的Eclipse項目,並從ANTLRWorks中導入了ANTLR4罐,以便按照ANTLR書中的示例手動調用詞法分析器和分析器。運行應用程序時,我得到以下異常:ANTLRWorks 2.1:在Eclipse中生成的Lexer + Parser導致UUID異常

Caused by: java.lang.UnsupportedOperationException: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with UUID 33761b2d-78bb-4a43-8b0b-4f5bee8aacf3 (expected e4178468-df95-44d0-ad87-f22a5d5fb6d3). 
    at org.antlr.v4.runtime.atn.ATNSimulator.deserialize(ATNSimulator.java:111) 
    at org.antlr.v4.runtime.atn.ATNSimulator.deserialize(ATNSimulator.java:90) 
    at TestLexer.<clinit>(TestLexer.java:177) 
    ... 1 more 
Caused by: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with UUID 33761b2d-78bb-4a43-8b0b-4f5bee8aacf3 (expected e4178468-df95-44d0-ad87-f22a5d5fb6d3). 
    ... 4 more 

然而,在ANTLRWorks TestRig運行相同的語法和輸入數據時,一切工作正常。 這裏怎麼回事?我已經發現了關於版本問題的類似帖子,但是沒有解決這個UUID問題。誰能幫我這個?

在此先感謝!

回答

0

最可能的原因是您在解析器生成時和運行時使用不同版本的antlr運行時。

請確保您在兩種情況下都使用完全相同的antlr版本,並且錯誤應該消失。

聲明:我可能錯了,因爲我在.Net中使用antlr。

+0

由於我正在引用(來自Eclipse項目)ANTLRWorks發行版附帶的ANTLR運行時.jar,可能會導致此類版本問題? – Nebelung

+0

好吧,就像我說的,我不知道java工具足以幫助你,但是嘗試下載antlr,然後從命令行生成解析器,並使用您下載的antlr版本中提供的運行時。如果這樣的話,這意味着你所擁有的antlrworks版本有問題。 –

2

ANTLRWorks使用ANTLR的非標準構建以支持其某些編輯器功能(代碼完成等)。它的設計方式支持正確的代碼生成,但爲了編譯和運行解析器,您需要使用來自antlr.org的參考ANTLR庫。