релиз , свободен генератор на лексични анализатори за езици C и C++. Напомняме, че re2c беше написан през 1993 година от Питър Бамбулес като експериментален генератор на много бързи лексични анализатори, който се отличава от другите генератори със скоростта на генерирания код и необичайно гъвкавия потребителски интерфейс, който позволява лесно и ефективно интегриране на анализаторите в съществуващата кодова база. Оттогава проектът се развива от общността и продължава да бъде платформа за експерименти и изследвания в областта на формалните граматики и крайни автомати.
Подготовката на версията отне почти цяла година. Повечето време, както винаги, беше посветено на разработването на теоретичната база и писането на
статията ««.
Алгоритмите, описани в статията, са реализирани в експерименталната библиотека libre2c
(изграждането на библиотеката и тестовете за производителност е деактивирано по подразбиране и се активира с конфигурационната опция «—enable-libs»). Библиотеката не е замислена като конкурент на вече съществуващите проекти, като RE2, а като изследователска платформа за разработване на нови
алгоритми (които след това могат да се използват в re2c или в други проекти). Освен това е удобно от гледна точка на тестването, измерването на производителността и създаването на биндинги към други езици.
Основните нововъведения в версия re2c 1.2:
- Добавен е нов опростен начин за проверка на края на входните данни («EOF rule»). За това е добавена конфигурацията «re2c:eof»,
която позволява да се избере терминален символ,
и специално правило «$», което сработва, ако лексерът
успешно е достигнал края на входните данни.
Исторически re2c предлага на избор няколко начина за проверка на
края на входните данни, вариращи по ограничения, ефективност и простота
на приложение. Новият метод има за цел да опрости написването на код, като същевременно
остава ефективен и широко приложим. Старите методи
продължават да работят и могат да бъдат предпочитани в отделни случаи. - Добавена е възможността за включване на външни файлове с помощта на директива
«!include:re2c «file.re» *», където «file.re» е името на включения файл. Re2c търси файлове в директорията на включващия файл,
както и в списъка с пътища, зададени с помощта на опцията «-I».
Включените файлове могат да съдържат други файлове.
Re2c предоставя «стандартни» файлове в директорията «include/»
на проекта — предполага се, че там ще се натрупват полезни определения
на регулярни изрази, нещо в духа на стандартната библиотека.
Досега, по поръчки на потребителите, бе добавен един файл с определения на категории Unicode. - Добавена е възможността да се генерират заглавни файлове с произволно
съдържание с помощта на опции «-t —type-header» (или съответните
конфигурации) и новите директиви «01!header:re2c:on*/» и
«01!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-suppor» позволява да се пише код
в смесен стил flex и re2c, което малко затруднява синтактичното парсиране.
Режимът на съвместимост с flex рядко се използва в нов код,
но re2c продължава да го поддържа за обратно съвместимост. - Операторът за изваждане на символните класове «/» вече се прилага
преди разгръщането на кодировката, което позволява да се прилага в повече случаи,
ако се използва кодировка с променлива дължина на символа (например UTF8). - Изходният файл сега се създава атомарно: re2c първо създава временен файл
и записва резултата в него, а след това преименува времения файл в изходния
с една операция. - Документацията беше допълнена и преработена; в частност, бяха добавени нови
глави за
и .
Новата документация е събрана в
с примери (едни и същи изходни кодове се изобразяват в manpage и в онлайн документация).
Бяха направени незначителни опити за подобряване на четимостта на сайта на телефони. - От гледна точка на разработчиците, re2c получи по-подробна подсистема.
отладка. Отладъчният код сега е изключен в релизните версии и
може да бъде включена с помощта на конфигурационната опция «—enable-debug».
Източник: opennet.ru
