簡體   English   中英

解析器生成器,生成獨立的C ++代碼

[英]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表,這些表可以由“解析引擎”使用。

為了完成您的任務(或類似任務),我執行了以下操作:

  1. 以Gold格式准備您的LALR語法

  2. 生成解析表(一個二進制文件)

  3. 使用古老的技巧將二進制文件轉換為頭文件,例如

    unsigned char ParseTable [] = {...};

  4. 從“解析引擎”源修改加載程序(或者,我記得使用支持內存加載的C版本)

  5. 將GPEngine的源代碼(如果是C ++版本)組合到.h / .cpp對中。

  6. 將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM