重新2c 1.2

2 月 2 日星期五,re2c 發布,這是用於 C 和 C++ 語言的詞法分析器的免費生成器。 提醒一下,re1993c 是由Peter Bamboulis 於XNUMX 年編寫的,作為非常快的詞法分析器的實驗生成器,與其他生成器的區別在於生成代碼的速度和異常靈活的用戶界面,允許分析器輕鬆有效地嵌入到現有的程式碼庫。 從那時起,該計畫一直由社群開發,並繼續成為形式語法和有限狀態機領域的實驗和研究平台。

1.2版本主要創新點:

  • 新增了一種新的(簡化的)方法來檢查輸入資料的結尾
    (英文“EOF 規則”)。
    為此,添加了 re2c:eof 配置,
    允許您選擇終端字符,
    以及一個特殊的 $ 規則,如果詞法分析器
    成功到達輸入資料的末尾。
    從歷史上看,re2c 提供了多種驗證方法的選擇
    輸入端的限制、效率和簡單性各不相同
    應用程式. 新方法旨在簡化程式碼編寫,同時
    同時保持有效和廣泛適用。 老辦法
    仍然有效,並且在某些情況下可能是首選。

  • 新增了使用指令包含外部文件的功能
    /*!include:re2c "file.re" */ 其中 file.re
    這是包含文件的名稱。 Re2c在包含文件目錄中尋找文件,
    以及使用 -I 選項指定的路徑清單中。
    包含的文件可能包含其他文件。
    Re2c 在 include/ 目錄中提供「標準」文件
    項目 - 預計有用的定義將在那裡積累
    正規表示式,類似標準函式庫。
    到目前為止,應工作人員的要求,已新增了一個包含 Unicode 類別定義的檔案。

  • 新增了生成任意頭檔的功能
    使用 -t --type-header 選項(或適當的
    設定)和新指令 /*!header:re2c:on*/ 和
    /*! header:re2c:off*/. 這在以下情況下可能很有用:
    當re2c需要產生變數、結構體和巨集的定義時,
    用於其他翻譯單元。

  • Re2c 現在可以理解正規表示式中的 UTF8 文字和字元類別。
    預設情況下,re2c 解析像「∀x ∃y」這樣的表達式。
    1 位元 ASCII 字元序列 e2 88 80 78 20 e2 88 83 79
    (十六進位代碼),使用者必須手動轉義 Unicode 字元:
    「u2200x u2203y」。 這對很多人來說是非常不方便和意想不到的
    用戶(不斷的錯誤報告證明了這一點)。 所以現在
    re2c 提供了 --input-encoding 選項,
    它允許您更改行為並將“∀​​x ∃y”解析為
    2200 78 20 2203 79。

  • Re2c 現在允許在 -r --reuse 模式下使用常規 re2c 區塊。
    如果輸入檔包含許多區塊並且僅包含其中的一些區塊,這會很方便
    需要重複使用。

  • 現在您可以設定警告和錯誤訊息的格式
    使用新的 --location-format 選項。 顯示 GNU 格式
    如檔案名稱:行:列:,MSVC 格式為檔案名稱(行,列)。
    此功能對於 IDE 愛好者可能很有用。
    還新增了 --verbose 選項,如果成功則列印一條簡短的勝利訊息。

  • 與 Flex 的“兼容性”模式已改進 - 一些解析錯誤已修復並且
    在極少數情況下,運算子優先順序不正確。
    從歷史上看,-F --flex-support 選項可讓您編寫程式碼
    混合了flex風格和re2c風格,這使得解析有點困難。
    Flex相容模式在新程式碼中很少使用,
    但 re2c 繼續支援它以實現向後相容性。

  • 字元類減法運算符 / 現在適用
    在擴展編碼之前,這允許它在更多情況下使用,
    如果使用可變字元長度編碼(例如 UTF8)。

  • 現在,輸出檔案是自動建立的:re2c 首先建立一個臨時文件
    並將結果寫入其中,然後將臨時檔案重新命名為輸出
    一次操作。

  • 文檔已完成並重寫; 特別是增加了新的
    章節 關於填充緩衝區
    и 關於檢查輸入資料結尾的方法.
    新文件以以下形式收集
    一頁綜合手冊
    帶有範例(手冊頁和線上文件中提供了相同的來源)。
    在提高網站在手機上的可讀性方面做出了一些糟糕的嘗試。

  • 從開發者的角度來看,re2c獲得了更完整的子系統
    偵錯現在在發布版本中禁用調試代碼,並且
    可以使用設定選項 --enable-debug 啟用。

這個版本花了很長時間——幾乎整整一年。
一如既往,大部分時間都花在發展理論框架和寫作上
文章 “NFA 上的高效能 POSIX 子匹配提取”.
文章中描述的演算法在實驗庫libre2c中實現
(預設為停用建置庫和基準測試,並透過配置選項啟用
--啟用庫)。 該圖書館並未被視為現有圖書館的競爭對手
像 RE2 這樣的項目,但作為開發新產品的研究平台
演算法(然後可以在 re2c 或其他項目中使用)。
從測試、基準測試和創建與其他語言的綁定的角度來看,它也很方便。

感謝 re2c 開發人員感謝所有幫助此版本發布的人,
並向整個社區尋求想法、錯誤報告、補丁、士氣等。 ;]

來源: linux.org.ru

添加評論