Vydání re2c lexer generator 2.0

odehrál se uvolnění re2c 2.0, bezplatný generátor lexikálního analyzátoru pro C a C++. Projekt re2c původně vytvořil v roce 1993 Peter Bamboulis jako experimentální generátor velmi rychlých lexikálních analyzátorů, který se od ostatních generátorů odlišuje rychlostí generovaného kódu a neobvykle flexibilním uživatelským rozhraním, které umožňuje snadno a efektivně integrovat analyzátory do existující kódové základny. . Od té doby je projekt vyvíjen komunitou a nadále je platformou pro experimentování a výzkum v oblasti formálních gramatik a stavových automatů.

Hlavní změny:

  • Přidána podpora pro jazyk Go (povolená buď volbou "-lang go" pro re2c, nebo jako samostatný program re2go). Dokumentace pro C a Go je generována ze stejného textu, ale s různými příklady kódu. Subsystém generování kódu v re2c byl zcela přepracován, což by mělo v budoucnu usnadnit podporu nových jazyků.
  • Přidán alternativní systém sestavení na CMake (díky ligfx!). Pokusy přeložit re2c do CMake byly dělány dlouho, ale před ligfx nikdo nenabízel kompletní řešení. Starý systém sestavení na Autotools je nadále podporován a používán a v dohledné době se neplánuje jeho opuštění (částečně proto, aby se předešlo problémům pro vývojáře distribuce, částečně proto, že starý systém sestavení je stabilnější a přehlednější než nový ). Oba systémy jsou stejně nepřetržitě testovány pomocí Travis CI.
  • Přidána možnost specifikovat kód rozhraní v konfiguracích při použití generického API (generic API). V minulosti musela být většina API definována ve formě funkcí nebo funkčních maker. Nyní je lze zadat ve formě libovolných řetězců s pojmenovanými parametry šablony ve tvaru "@@{jméno}" nebo jednoduše "@@" (pokud existuje pouze jeden parametr a neexistuje žádná nejednoznačnost). Styl API je nastaven konfigurací re2c:api:style (hodnota funkcí určuje funkční styl, zatímco hodnota volného tvaru je libovolná).
  • Vylepšený provoz volby "-c", "--start-conditions", která umožňuje kombinovat několik vzájemně propojených lexerů v jednom bloku re2c. Nyní můžete používat normální bloky i podmíněné bloky a definovat několik nesouvisejících podmíněných bloků v jednom souboru. Vylepšené fungování možnosti "-r", "--reuse" (opětovné použití kódu z jednoho bloku v jiných blocích) v kombinaci s "-c", "--start-conditions" a "-f", "--storable-" state" options (stavový lexer, který lze v libovolném bodě přerušit a obnovit později).
  • Opravena chyba v nedávno přidaném algoritmu zpracování konce vstupu (pravidlo EOF), která ve vzácných případech vedla k nesprávnému zpracování překrývajících se pravidel.
  • Zjednodušený proces bootstrapu. Dříve se systém sestavení snažil dynamicky najít již sestavené re2c, které by se dalo použít k jeho přestavbě. To vedlo k nesprávným závislostem (protože se graf závislostí ukázal jako dynamický, což se většině systémů sestavení nelíbí). Nyní, abyste mohli znovu sestavit lexery, musíte explicitně nakonfigurovat systém sestavení a nastavit proměnnou RE2C_FOR_BUILD.

Zdroj: opennet.ru

Přidat komentář