vydání , volného generátoru lexikálních analyzátorů pro jazyky C a C++. Připomínáme, že re2c byl napsán v roce 1993 Peterem Bambulisem jako experimentální generátor velmi rychlých lexikálních analyzátorů, který se od ostatních generátorů liší rychlostí vygenerovaného kódu a neobvykle flexibilním uživatelským rozhraním, které umožňuje snadnou a efektivní integraci analyzátorů do stávající kódové základny. Od té doby projekt pokračuje ve vývoji komunitou a stále zůstává místem pro experimenty a výzkum v oblasti formálních gramatik a konečných automatů.
Příprava vydání trvala téměř celý rok. Většina času, jak je obvyklé, byla věnována vývoji teoretické základny a psaní
článku „«.
Algoritmy popsané v článku jsou implementovány v experimentální knihovně libre2c
(kompilace knihovny a testy výkonu jsou ve výchozím nastavení zakázány a lze je povolit pomocí konfigurační volby „—enable-libs“). Knihovna není zamýšlena jako konkurent již existujícím projektům, jako je RE2, ale jako výzkumná platforma pro vývoj nových
algoritmů (které mohou být následně použity v re2c nebo v jiných projektech). To je také výhodné z hlediska testování, měření výkonu a vytváření vazeb pro jiné jazyky.
Hlavní novinky verze re2c 1.2:
- Byl přidán nový zjednodušený způsob kontroly konce vstupních dat („EOF rule“). K tomu byla přidána konfigurace „re2c:eof“,
která umožňuje zvolit terminální znak,
a speciální pravidlo „$“, které se aktivuje, pokud lexer
úspěšně dosáhne konce vstupních dat.
Historicky re2c nabízí několik způsobů, jak zkontrolovat
konec vstupních dat, které se liší podle omezení, efektivity a jednoduchosti
použití. Nový způsob má za cíl zjednodušit psaní kódu, přičemž
zůstává efektivní a široce použitelný. Staré způsoby
stále fungují a mohou být v některých případech preferovány. - Byla přidána možnost zahrnutí externích souborů pomocí direktivy
„/*!include:re2c "file.re" */“, kde „file.re“ je název zahrnutého souboru. Re2c hledá soubory ve složce zahrnujícího souboru,
a také v seznamu cest určených pomocí volby „-I“.
Zahrnuté soubory mohou zahrnovat další soubory.
Re2c poskytuje „standardní“ soubory ve složce „include/“
projektu – předpokládá se, že tam budou shromažďovány užitečné definice
regulárních výrazů, něco na způsob standardní knihovny.
Zatím byla na základě žádostí přidána jedna soubor s definicemi kategorií Unicode. - Byla přidána možnost generovat hlavičkové soubory s libovolným
s obsahem pomocí voleb „-t —type-header“ (nebo odpovídajících
konfigurací) a nových direktiv „/*!header:re2c:on*/“ a
„/*!header:re2c:off*/“. To může být užitečné v případech,
když re2c má generovat definice proměnných, struktur a makro,
které se používají v jiných překladačích. - Re2c nyní rozumí UTF8 literálům a třídám znaků v regulárních výrazech.
Ve výchozím nastavení re2c parsuje výrazy jako „∀x ∃y“ jako
sekvenci 1-bitových ASCII znaků „e2 88 80 78 20 e2 88 83 79“
(hex-kódy), a uživatelé musí ručně escapovat Unicode znaky:
„\\u2200x \\u2203y“. To je pro mnohé
což dokazují neustálé reporty chyb. Proto nyní
re2c poskytuje volbu „—input-encoding {ascii | utf8}“
která umožňuje změnit chování a parsovat „∀x ∃y“ jako
„2200 78 20 2203 79“. - Re2c nyní umožňuje používat běžné re2c bloky v režimu „-r —reuse“.
To je užitečné, pokud vstupní soubor obsahuje mnoho bloků a pouze část z nich
potřebuje opětovné použití. - Byla přidána možnost nastavovat formát varování a chybových zpráv
pomocí nové volby „—location-format {gnu | msvc}“. GNU formát se zobrazuje
jako „filename:line:column:“, zatímco formát MSVC — jako „filename(line,column)“.
Tato funkce se může hodit milovníkům IDE.
Byla také přidána možnost „—verbose“, která zobrazí stručnou úspěšnou zprávu v případě úspěchu. - Režim „kompatibility“ s flex byl vylepšen — byly opraveny některé chyby analýzy a
nesprávná priorita operatorů v ojedinělých případech.
Historicky možnost „-F —flex-suppor“ umožňuje psát kód
smíšeně ve stylu flex a ve stylu re2c, což poněkud komplikuje syntaktickou analýzu.
Režim kompatibility s flex se vzácně používá v novém kódu,
ale re2c jej i nadále podporuje pro zpětnou kompatibilitu. - Operátor odečítání znakových tříd „/“ se nyní uplatňuje
před rozbalením kódování, což umožňuje jeho použití ve větším počtu případů,
pokud se používá kódování s proměnlivou délkou znaku (například UTF8). - Výstupní soubor je nyní vytvářen atomárně: re2c nejprve vytvoří dočasný soubor
a zapíše do něj výsledek, a poté přejmenuje dočasný soubor na výstupní
v jedné operaci. - Dokumentace byla doplněna a přepracována; zejména byly přidány nové
kapitoly o
a .
Nová dokumentace byla shromážděna jako
s příklady (ty stejné zdrojové materiály jsou vykreslovány v manpage a v online dokumentaci).
Byly učiněny slabé pokusy o zlepšení čitelnosti webu na telefonech. - Z pohledu vývojářů re2c získal plnohodnotnější subsystém.
ladění. Ladicí kód je nyní v uvolněných sestaveních vypnutý a
lze povolit pomocí konfigurační možnosti „—enable-debug“.
Zdroj: opennet.ru
