2013-02-16 39 views
5

最近我拿起了The Definitive ANTLR 4 Reference的副本,由於我在處理語法和語言方面很成熟,所以我想在我的DSL上工作,我曾用yaccbison編寫過。總體思路是編寫一個翻譯器(包含對類型安全性的驗證(1)),在運行時將DSL轉換爲JavaScript,然後由v8執行。將ANTLR 4集成到C++應用程序中

儘管ANTLR被設計爲包含在Java應用程序中,但我仍想繼續使用本機C++。 ANTLR 4能否生成這樣一個C語法分析器/詞法分析器,我可以使用C++樣式的包裝器來包含它?怎麼做?


(1)這本書有,我將作爲模板使用一些很好的例子。
(2)我不確定,但我認爲我讀了ANTLR不支持C++輸出的地方,對不對?

+0

只是好奇,你最終做了什麼? JavaCC可以生成C++輸出。 – costa 2015-10-19 18:08:26

回答

3

ANTLR v3有各種不同的目標,最值得注意的是Java(當然),C,C#,JavaScript和Python。有關完整列表,請參閱:http://www.antlr.org/wiki/display/ANTLR3/Code+Generation+Targets

但是,ANTLR v4此時只有一個Java目標。

+1

在提供完整的C/C++生成目標之前,我將不得不使用另一種方法,然後......不知何故。 – 2013-02-16 19:22:46

+1

跛腳,真的嗎?無論如何,你可以使用ANTLR 3.語法語法並非完全不同,當爲C++提供C/C++時,你可以切換到更新的版本? – 2013-02-16 19:37:13

+0

v3和v4有很多不同嗎?我認爲第4版更加高效,並且本書作爲我不想使用舊版本的最新版本的參考。我想通過調用Java將Java輸出作爲輸入傳遞給C++,直到有一個解決方案在不使用Java的情況下包含所有內容。 – 2013-02-16 19:42:09

8

我發現ANTLR 3 C/C++目標幾乎不可用。它包含了很多黑客來繞過C中缺少的例外情況,因此僅向專家推薦。雖然這是Terr的呼籲,但我希望ANTLR 4不支持目標語言,除非能夠隔離最終用戶所需的任何hackery,否則不會有本機異常。 ANTLR 2 C++目標比ANTLR 3更清晰,但ANTLR 2本身具有侷限性,包括非常混亂的許可(使其難以在商業產品中使用)。

+0

ANTLR 4中的語言目標現在是完全獨立的項目。參考實現只有Java,並且C#目標現在也可用。如果/由獨立開發人員/團隊提供,C++目標將可用。 – 2014-01-05 22:43:48

1

約翰G.回答

  • 我同意ANTLR3Ç目標是非常黑客。我,20年的C/C++專家,甚至沒有作者的答案甚至猜測如何使用它。是的,想法很好,但沒有接近不可能理解的文檔。

  • 我不同意主要的例外情況。在ANTLR2和C++實現fir v2的時候,異常確實存在......並且有人認爲如果刪除異常,它會更快。在v3他們已經嘗試做到這一點,但...

  • 但速度並沒有變好。我們希望在我們的Valentina數據庫引擎中從ANTRL2切換到ANTLR3,我們花了幾個月的時間重新寫入v3語法,並且......零加速。只是零。所以我們現在使用ANTLR的v2。

  • 我認爲主要問題,如果在ANTLR速度是事實,它爲每個規則它產生單獨的功能。是的,這是它強大的一面,這是它的弱點。

在v4中,Terrence發明瞭如何在Lexer中使用狀態機。如果我們也可以解析解析器。我認爲在理想情況下,ANTLR可以像現在一樣產生功能,而我們開發語法,並釋放狀態機。但迄今爲止這是一個夢想。

3

如果你仍然感興趣,4.7版的antlr確實有一個C++目標。