На понеделник 20 юли излезе версия re2c – генератор на бързи лексикални анализатори.
Основни промени:

  • Добавена е поддръжка на езика Go
    (активира се или с опцията —lang go за re2c, или под формата на отделна програма re2go).
    Документацията за C и Go се генерира от един и същ текст, но с различни
    примери на код. Изцяло е преработена подсистемата за генериране на код в re2c, което
    трябва да улесни поддръжката на нови езици в бъдеще.

  • Добавена е алтернативна система за изграждане на CMake (благодарим на ligfx!).


    Опити за пренос на re2c на CMake са правени още отдавна, но до ligfx никой не е
    предложил пълноценно решение.
    Старият строителен механизъм с Autotools продължава да се поддържа и използва,
    и в обозримо бъдеще няма планове да бъде изоставен (отчасти за да не се създадат
    проблеми на разработчиците на дистрибуции, отчасти защото старият строителен механизъм
    е по-стабилен и лаконичен от новия).
    И двете системи постоянно се тестват с Travis CI.
  • Добавена е възможността за задаване на интерфейсния код в конфигурациите при използване
    на обобщено АПИ (generic API). Преди повечето АПИ трябваше да се задават под формата
    на функции или функционални макроси. Сега могат да се задават под формата на произволни
    строки с именовани шаблонни параметри от вид @@{name} или просто @@ (ако
    параметърът е един и не възниква неяснота). Стилът на АПИ се задава с конфигурацията
    re2c:api:style (стойността functions задава функционален стил, а free-form – произволен).

  • Подобрена е работата на опцията -c, —start-conditions, позволяваща комбинирането на няколко
    взаимосвързани лексера в един re2c-блок. Сега могат да се използват
    обикновени блокове наред с условни и да се задават няколко несвързани условни
    блока в един файл.
    Подобрена е работата на опцията -r, —reuse (повторно използване на код от един блок
    в други блокове) в комбинация с опции -c, —start-conditions и -f, —storable-state
    (лексер с запазено състояние, който може да бъде прекъснат по всяко време
    и да продължи изпълнението по-късно).

  • Коригирана е грешка в наскоро добавения алгоритъм за обработка на края на входните данни
    (EOF rule), която в редки случаи водеше до неправилна обработка
    на припокриващи се правила.

  • Оптимизиран е процесът на бутстрапване. Преди системата за изграждане се опитваше динамично да намери вече
    събрания re2c, който може да се използва за повторно изграждане на самия себе си.
    Това водеше до неправилни зависимости (тъй като графът на зависимостите ставаше
    динамичен, което повечето системи за компилация не харесват).
    Сега, за да се реконструират лексерите, е необходимо изрично
    да се конфигурира системата за компилация и да се зададе променливата RE2C_FOR_BUILD.

Благодаря на всички, които участваха в подготовката на това издание!

Източник: linux.org.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster