V pátek 2. srpna byl vydán re2c – volný generátor lexikálních analyzátorů pro jazyky C a C++. Připomeň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í generovaného kódu a neobvykle flexibilním uživatelským rozhraním, které umožňuje snadno a efektivně integrovat analyzátory do stávající kódové základny. Od té doby projekt vyvíjí komunita a stále zůstává místem pro experimenty a výzkum v oblasti formálních gramatik a konečných automatů.
Hlavní novinky ve verzi 1.2:
Byl přidán nový (zjednodušený) způsob kontroly na konec vstupních dat
(angl. „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" */, где file.re
je to název zahrnutého souboru. Re2c hledá soubory ve složce zahrnujícího souboru,
a také v seznamu cest zadaný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
obsahem pomocí možností -t —type-header (nebo odpovídajících
konfigurací) a nových direktiv /*!header:re2c:on*/ a
/*!header:re2c:off*/. Это может быть полезно в случаях,
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 analyzuje výrazy jako "∀x ∃y" jako.
sekvenci 1bitový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é uživatele velmi nepohodlné a nečekané,
což dokazují neustálé reporty chyb. Proto nyní
re2c poskytuje možnost —input-encoding ,
která umožňuje změnit chování a analyzovat "∀x ∃y" jako
2200 78 20 2203 79.Re2c nyní umožňuje používat standardní 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é možnosti —location-format . Formát GNU 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.
Také byla přidána možnost —verbose, která vypisuje krátkou vítěznou zprávu v případě úspěchu.Byl vylepšen režim „kompatibility“ s flex — byly opraveny některé chyby analýzy a
nesprávná priorita operatorů v ojedinělých případech.
Historicky opce -F —flex-support 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 odčítání znakových tříd / nyní platí
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é
a o způsobech kontroly konce vstupních dat.
Nová dokumentace byla shromážděna jako
vyčerpávající jednopageový manuál
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
může být aktivován pomocí konfigurační možnosti —enable-debug.
Tato verze trvala dlouho — téměř celý rok.
Většina času, jako vždy, byla věnována vývoji teoretického základu a psaní
na stránkách Maven Apache Project „Efficient POSIX Submatch Extraction on NFA“.
Algoritmy popsané v článku jsou implementovány v experimentální knihovně libre2c
(sestavení knihovny a benchmarků je ve výchozím nastavení vypnuto a může být zapnuto pomocí konfigurační možnosti
—enable-libs). Knihovna není zamýšlena jako konkurent již existujícím
projektům jako RE2, ale jako výzkumná platforma pro vývoj nových
algoritmů (které mohou být později použity v re2c nebo v jiných projektech).
Také je to užitečné z hlediska testování, benchmarkingu a vytváření vazeb na jiné jazyky.
Děkujeme od vývojářů re2c všem, kteří pomohli k tomu, aby tato verze vznikla,
a celému komunitnímu prostředí za nápady, reporty chyb, patche, bojového ducha atd. ;]
Zdroj: linux.org.ru
