В петък, 2 август, излезе версия re2c – безплатен генератор на лексикални анализатори за езици C и C++. Напомняме, че re2c беше написан през 1993 година от Питър Бамбулис като експериментален генератор на много бързи лексикални анализатори, отличаващ се от другите генератори с бързината на генерирания код и необичайно гъвкавия потребителски интерфейс, който позволява лесна и ефективна интеграция на анализатори в съществуващата кодова база. Оттогава проектът се развива от общността и продължава да бъде платформа за експерименти и изследвания в областта на формалните граматики и краен автомат.
Основни нововъведения в версия 1.2:
Добавен е нов (опростен) начин за проверка на края на входните данни
(на английски 'EOF rule').
За целта е добавена конфигурация 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
(hex кодове), и потребителите трябва ръчно да екранират Unicode символите:
"u2200x u2203y". Това е много неудобно и неочаквано за много
потребители (както показват постоянните отчети за грешки). Затова сега
re2c предлага опцията —input-encoding <ascii | utf8>,
която позволява да се промени поведението и да се парсира "∀x ∃y" като
2200 78 20 2203 79.Re2c вече позволява използването на обикновени re2c блокове в режим -r —reuse.
Това е удобно, ако входният файл съдържа много блокове, а само част от тях
нуждае се от повторно използване.Появи се възможността за задаване на формата на предупрежденията и съобщенията за грешки
чрез новата опция —location-format <gnu | msvc>. GNU форматът се показва
като filename:line:column:, а MSVC форматът — като filename(line,column).
Тази функция може да е полезна на любителите на IDE.
Също така беше добавена опция —verbose, която извежда кратко награждаващо съобщение при успех.Беше подобрен режимът на „съвместимост“ с flex — поправени са някои грешки в парсирането и
неправилният приоритет на операторите в редки случаи.
Исторически опцията -F —flex-support позволява писане на код
в смесен стил flex и re2c, което малко затруднява синтактичното парсиране.
Режимът на съвместимост с flex рядко се използва в нов код,
но re2c продължава да го поддържа за обратно съвместимост.Операторът за изваждане на символните класове \/ сега се прилага
преди разгръщането на кодировката, което позволява да се прилага в повече случаи,
ако се използва кодировка с променлива дължина на символа (например UTF8).Изходният файл сега се създава атомарно: re2c първо създава временен файл
и записва резултата в него, а след това преименува времения файл в изходния
с една операция.Документацията беше допълнена и преработена; в частност, бяха добавени нови
и за методи за проверка на края на входните данни.
Новата документация е събрана в
изчерпателен едностраничен мануал
с примери (едни и същи изходни кодове се изобразяват в manpage и в онлайн документация).
Бяха направени незначителни опити за подобряване на четимостта на сайта на телефони.От гледна точка на разработчиците, re2c получи по-подробна подсистема.
отладка. Отладъчният код сега е изключен в релизните версии и
може да бъде активиран с опцията configure —enable-debug.
Тази версия отне много време — почти година.
По-голямата част от времето, както винаги, беше отделена за разработка на теоретичната основа и написване на
на статията «Efficient POSIX Submatch Extraction on NFA».
Алгоритмите, описани в статията, са реализирани в експерименталната библиотека libre2c
(компилацията на библиотеката и бенчмарковете е изключена по подразбиране и се активира с опцията configure
—enable-libs). Библиотеката не е замислена като конкурент на вече съществуващите
проекти като RE2, а като изследователска платформа за разработка на нови
алгоритми (които по-късно могат да се използват в re2c или в други проекти).
Това е удобно и от гледна точка на тестването, бенчмарковете и създаването на биндинги за други езици.
Благодарим на разработчиците на re2c на всички, които помогнаха за реализацията на тази версия,
и изобщо на общността за идеи, отчети за грешки, пачове, бойния дух и т.н. ;]
Източник: linux.org.ru
