2011-06-13 43 views
-1

目前我使用ANTLR V3.1.1,現在我已經遷移到ANTLR V3.3。在那之後,我發現了以下錯誤:我面臨的問題將Antlr版本3.1.1遷移到Antlr 3.3(獲取NoSuchMethodError:CommonTreeNodeStream.getNodeIndex)

Unexpected exception occurred: java.lang.NoSuchMethodError: org.antlr.runtime.tree.CommonTreeNodeStream.getNodeIndex(Ljava/lang/Object;)I at *.expression.antlr.FocusCommonTreeNodeStream.getNodeIndex(FocusCommonTreeNodeStream.java:16)

請幫我在這個問題上.. 在此先感謝..!

+0

你可以發佈一個[SSCCE](http://sscce.org/)在v3.3中產生異常,但不在v3.1.1中嗎?在編輯您的原始問題之前,請確保您瞭解[SSCCE](http://sscce.org/)的內容。謝謝。 – 2011-06-13 11:07:22

+0

另外,我認爲你已經使用v3.3'org.antlr.Tool'生成了新的源文件(並編譯它們!)?當然,使用v3.3運行時文件運行v3.1.1 .class文件會導致問題。 – 2011-06-13 12:02:24

+0

非常感謝您的回覆。我沒有使用V3.3生成類文件。我直接將V3.1更換爲V3.3 jar並開始運行。我的問題是,在我們的源文件中我們使用的是getNodeIndex(Obj),但是這個方法在V3.3中根本不可用,那麼我們爲什麼要編譯並生成要運行的類。請澄清。 – Meena 2011-06-13 12:17:54

回答

0

好的,通過查看您原來的帖子下的評論,我會在這裏完整地發佈答案,以防人們在搜索網絡後發現此問題Q & A.


你得到這個異常的原因是因爲你根本更換了ANTLR罐子,做重新從你的語法詞法分析器和解析器。由ANTLR v3.1.1生成的編譯的詞法分析器和解析器文件需要ANTLR v3.1.1運行時類。他們不會(必然)與其他ANTLR運行時版本一起工作。因此,如果您想要升級到ANTLR v3.3,則需要使用ANTLR v3.3中的org.antlr.Tool從語法文件中重新生成(新)詞法分析器和分析器。