2009-11-02 105 views
9

我已經開始學習ANTLR,並同時擁有2007年的書籍「ANTLR參考」和ANTLRWorks(一種用於創建語法的交互式工具)。而且,作爲那種人,我從第3章開始(「不耐煩的快速瀏覽」)。ANTLR入門和避免常見錯誤

這是一個相當痛苦的過程,特別是因爲一些錯誤是相當困難的(例如ANTLR: "missing attribute access on rule scope" problem這只是對我意味着「你有什麼問題」)。另外我有一些非常簡單的語法(只有3-4個產品)和簡單的輸入(2行),當運行時出現「OutOfMemory」錯誤。

ANTLR網站很有用,但有些分散,有些SO用戶評論說(https://stackoverflow.com/questions/278480/good-tutorial-for-antlr)這本書和教程期望很高的入門級。正因爲如此,我一直不願意接近ANTLR的討論名單。

LATER我們開始接觸它了。簡單可靠的例子可以輕鬆擴展,這將是有用的。這是值得精通的,因爲我們改變了很多基於ANTLR的想法。

一個問題是ANTLR V3與V2有顯着的變化。 SO(以及ANTLR頁面)上的一個答案指的是不再可用的V2語法。

SO上的一些ANTLR問題對我有很大幫助,但發現它們有點特別。所以我想知道SO用戶如何幫助學習過程減輕痛苦。 (如果您參考參考書,指向特定頁面將會很有用)。

編輯。 @duffymo和@JamesAnderson已經證實ANTLR很努力 - 主要是因爲解析器很困難。 (FWIW我已經通過LEX/YACC等,毫無疑問ANTLR更強大,更容易處理。)我認爲在有可能避免污染的領域仍然有用,例如:

  • 確保變量名
  • 加包名詞法分析器的正確大小寫以及解析器
  • 照顧過的規則順序,因爲它會影響優先

多的這些排序將是有益的。

+0

雖然沒有具體關於ANTLR,泰爾寫道稱爲語言實現模式以後的書。這是一個*優秀*與新手和獸醫都相關的工作。我| MVHO絕對必須爲任何人解析工作。 – 2011-03-02 12:10:39

回答

7

我同意 - ANTLR不適合心臟病。它確實期望很高的入門級,因爲語法和解析器不是微不足道的。

隨着中說,這裏有幾個建議:

  1. 忘了約1/2。版本3是標準;考慮到早期版本或其文檔,甚至不會浪費時間。
  2. OutOfMemoryError告訴你,在你定義的語法中有一些循環。
  3. IntelliJ擁有與ANTLR v3一起使用的美妙IDE。它會給你一個你的語法的圖形化表示,一步一步的調試等等。如果你要在ANTLR上做很多工作,購買許可證是值得的。

ANTLR不容易掌握。這本書很好,但很密集。正如你所指出的那樣,錯誤信息是神祕的。如果有人在這裏可以輕鬆一下,我會很驚訝。

+0

需要指出的是,ANTLRWorks對於構建語法也非常棒,它的功能與您在IntelliJ中列出的非常相似。 – RCIX 2009-12-10 02:24:13

+0

ANTLRWorks是的IntelliJ插件。我沒有在IDE之外使用它。 – duffymo 2009-12-10 04:21:39

5

很抱歉,但我ANTLR的經驗(事實上的JavaCC,野牛或任何全功能的解析器)是大部分的學習將是通過固定自己的錯誤!

獲得其他民族代碼的好例子會減少這種情況,最好的例子看起來非常簡單 - 但你失去了所有的汗水和頭髮拉動它讓他們看起來很容易。

+0

+1這真的很有用。 – 2009-11-02 12:55:20

+5

我剛剛開始使用它,「拔毛」確實是與ANTLR相關的學習曲線的正確技術術語。儘管我有這樣的感覺,即一旦到達ANTLR山的頂峯,頂上的景色就非常壯觀。 – 2009-11-16 19:47:56

2

即使你喜歡命令行,它使用AntlrWorks當你有問題,是值得的。圖示可以使我更容易看到我錯在哪裏。

一張圖片勝過一千個錯誤消息。