[英]Create parser using boost spirit in C++ which creates the AST using existing classes
我正在嘗試使用C ++中的boost spirit編寫解析器。 我希望以類對象的形式輸出此解析器。 我了解了語義動作,但是不確定如何在這些動作中創建類對象。
另外,我讀到“ boost phoenix”是用於語義動作的一個很好的庫。 但是,沒有找到將其與Boost Spirit結合使用的廣泛示例。
任何幫助或指示,將不勝感激。 謝謝。
是。 您可以。 只需從教程開始:
https://www.boost.org/doc/libs/1_68_0/libs/spirit/doc/html/spirit/qi/tutorials.html
要記住的重要一點是,語義動作不是創建AST節點的首選方法。 這似乎是來自Flex / Bison樣式工具的重復模式。
相反,更喜歡使用自動屬性合成和傳播 。 這樣,您將獲得預期的嵌入式DSL精神 。 這就是減少工作量和手動出錯空間的原因。 另請參見Boost Spirit:“語義行為是邪惡的”?
如果你
那么我建議您使用更傳統的解析器生成器,通常需要更多的工作。
好吧,如果您很討厭並且需要快速使事情正常運行的能力,這是“不錯的”,但是請記住,它不是核心語言支持,因此會給您的編譯器帶來沉重的負擔,並且有局限性。
我想說, Spirit X3的語義動作是一種更好的方法,在這種方法中,您可以使用所有C ++ 14語言,而無需庫英雄。 這減少了學習難度,並允許您使用現有代碼,而無需例如包裝成多態可調用對象,使用BOOST_PHOENIX_ADAPT_ *等進行適應。
只是為了好玩,這是一個X3解析器,我在其中在單個頭文件中實現了Phoenix for X3的基本子集: https : //github.com/sehe/expression-parsers/tree/x3-c++17
我想,如果您在此站點上搜索(我的)答案,那是自助餐。 當然,您可以隨時發布具體問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.