2009-04-27 96 views
2

我正在編寫一個非常接近僞代碼的實驗性語言,以獲取更多有關C++的知識。其中一個問題是我需要解析一些語法,而我的搜索找到一個好的C++語法分析器卻不成功(我找不到任何東西)。我想做到的是:C++有沒有語法分析器(類似於python的yapps)?

set a to 4 

而且我想解析器返回一個包含到類似的地圖:基於一組規則我給它

command = "set" 
var = "a" 
value = 4 

如果我沒有發現任何有用的東西,我最終將不得不推出自己的產品,但是我想盡可能地防止重新發明輪子。

那麼,有沒有人知道生成C++代碼的良好/理智語法分析器?如果廣泛使用它會好得多。

謝謝!

回答

2

滾動自己可以像寫文法一樣簡單!這是學習解析的好方法,收集對編程語言更深入的瞭解,最重要的是它很有趣。該方法被稱爲Recursive Descent。它通常會比解析器生成器更簡單更優雅,而且您再也不必再找到Yacc端口/叉子了:)對於一個很好的教程,請查看Jack Crenshaw的Let's Build a Compiler

否則,Lex和Yacc是傳統工具,而Boost :: Spirit是C++特有的,更現代。我會推薦Boost :: Spirit,因爲它可以幫助您在編程中鞏固C++範例。

+0

是的遞歸下降可以很容易地手工製作,但爲了讓它變好則是另一種情況。使用ANTLR之類的功能可以快速進行更改並檢測語法中的不一致,然後將其轉換爲手工解析器以獲得速度和良好的調試消息,這非常有用。 – Unknown 2009-04-27 19:20:23

10

檢查是否可以使用Boost::Spirit。 Spirit框架使得目標語法只能用C++編寫。

4

你應該檢查ANTLR實現。它可以爲多種語言生成,包括(我相信)C++。 [更仔細地看文檔,有一個C目標;目前尚不清楚是否有C++目標,但C目標很容易用於C++的可能性很高。]我還是老派,傾向於使用yacc(或bison),但那是因爲我是熟悉它而不是因爲它仍然是最好的(儘管它仍然很好)。

相關問題