На вторник, 19 ноември, беше представена версията re2c – на генератора на лексикални анализатори (известен още като компилатор на регулярни изрази в код на целевия език за програмиране). re2c се специализира в генерирането на бързи и лесно вграждаеми лексери. Той се различава от по-известния аналог flex с гъвкав интерфейс, генериране на оптимизирани нетаблични лексери и поддръжка на захвати (submatch extraction), базирани на детерминирани крайни автоматни системи с тагове (TDFA). re2c се използва в проекти, където скоростта на работа на лексер е важна, например в Ninja и в PHP.
В версия 4.0 системата за генериране на код беше изцяло преработена, което позволи добавянето на поддръжка за осем нови езика (D, Haskell, Java, JavaScript, OCaml, Python, V, Zig) в допълнение към вече поддържаните (C/C++, Go, Rust), както и общ механизъм за добавяне на нови езици чрез конфигурационни файлове. Кодогенераторът отговаря за транслацията на вече построения и оптимизиран краен автомат в код, тоест задачата му е да избере подходящите за целевия език управляващи конструкции, типове данни, обща модел на програмата и т.н. Преди всичката тази логика беше част от изходния код на re2c, и за да се промени или добави нов език, беше необходимо да се патчи изходния код и да се преизгради re2c. Подобни пачове не се приемаха в основното хранилище без реализиране на стандартен набор от примери и тестове, което допълнително усложняваше целия процес. Сега цялата тази логика е преместена в синтаксически файлове – текстови конфигурационни файлове, които могат да бъдат предоставени от потребителя (по подразбиране re2c използва стандартни). Изходният код на re2c е напълно свободен от детайли на конкретния език и разчита само на синтаксическия файл. Потребителят може частично да преопредели съществуващ синтаксически файл или да напише нов от нулата. За всички официално поддържани езици има пълна документация с примери.
Между другото, самата идея за синтаксическите файлове възникна благодарение на един коментар на ЛОРа, за което благодаря на
the_coder.
В изданието има много други промени, свързани с опростяване на потребителския интерфейс, подобряване на работата с захващащи групи (capturing groups), а също така е добавена онлайн среда за редактиране и компилация на примери: http://re2c.org/playground.
Източник: linux.org.ru
