[英]parser generator that generates stand-alone C++ code
是否有LALR解析器生成器可生成獨立的C ++代碼? 我希望它將生成兩個名為“ Parser.cpp”和“ Parser.hpp”的文件,並且生成的解析器在單個類中實現(可以包裝在任何名稱空間中),可以用於解析需要。
我想將其用於娛樂(即小型個人項目),並且我希望輸出是獨立的(沒有任何標題),以便我知道我可以在有C ++編譯器的任何地方對其進行編譯。
到目前為止的搜索:
我看過flex / bison,但是AFAIK都需要特殊的頭文件和庫。 我也對ANTLR進行了一些研究,但是對我來說,它可以生成獨立的C ++代碼並不明顯。 如果有人可以確認它可以,那么我可能會對其進行更多研究。
GOLD Parser (Bart Kiers在Wikipedia上提到了列表)具有對C和C ++語言的支持。 它不會生成完全獨立的C / C ++源代碼文件。 它所做的只是生成Lexer / Parser表,這些表可以由“解析引擎”使用。
為了完成您的任務(或類似任務),我執行了以下操作:
以Gold格式准備您的LALR語法
生成解析表(一個二進制文件)
使用古老的技巧將二進制文件轉換為頭文件,例如
unsigned char ParseTable [] = {...};
從“解析引擎”源修改加載程序(或者,我記得使用支持內存加載的C版本)
將GPEngine的源代碼(如果是C ++版本)組合到.h / .cpp對中。
將ParseTable附加到.cpp
當然,這不是那么簡單,但是所有步驟原則上都可以在單個“組合”腳本中完成,該腳本可以與多種語法一起使用。
我猜主要的缺點是GOLD是封閉源代碼和僅Windows的事實(這意味着要生成解析表,您必須使用Windows計算機)。
ANTLR 可以生成C ++代碼,盡管恕我直言,我發現對C ++的支持有點薄弱,它更像C代碼。 仍然可以與ANTLRWorks一起使用,這是一個很好的環境,可為您提供語法樹的圖形表示。
flex + bison的輸出包含兩個.c文件和一個.h文件。 這些都是完全獨立的,您只需要將它們編譯到應用程序中即可使用解析器。 不需要其他庫或標頭(在標准C之外)。
除非我誤解了您的要求,否則您絕對可以使用flex + bison來完成您想要的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.