Dňa 2. augusta, v piatok, bol vydaný re2c — voľný generátor lexikálnych analýzátorov pre jazyky C a C++. Pripomeňme, že re2c bol napísaný v roku 1993 Peterom Bambulisom ako experimentálny generátor veľmi rýchlych lexikálnych analýzátorov, ktorý sa líšil od iných generátorov rýchlosťou vygenerovaného kódu a neobvykle flexibilným používateľským rozhraním, ktoré umožňuje jednoducho a efektívne integrovať analýzátory do existujúcej kódovej základne. Odvtedy projekt pokračuje vo vývoji komunitou a naďalej zostáva miestom pre experimenty a výskum v oblasti formálnych gramatík a konečných automatov.
Hlavné novinky vo verzii 1.2:
Bol pridaný nový (zjednodušený) spôsob overovania konca vstupných údajov
(angl. „EOF rule“).
Na tento účel bola pridaná konfigurácia re2c:eof,
umožňujúca vybrať terminálny symbol,
a špeciálne pravidlo $, ktoré sa aktivuje, ak lexer
úspešne dosiahol koniec vstupných údajov.
Historicky re2c poskytuje na výber niekoľko spôsobov kontroly na
koniec vstupných údajov, líšiacich sa obmedzenosťou, efektívnosťou a jednoduchosťou
uplatnenia. Nový spôsob má za cieľ zjednodušiť písanie kódu, pričom
zostáva efektívny a široko použiteľný. Staré spôsoby
naďalej fungujú a môžu byť preferované v určitých prípadoch.Pridaná možnosť zahrnutia externých súborov pomocou direktívy
/*!include:re2c "file.re" */, где file.re
je názov zahrnutého súboru. Re2c vyhľadáva súbory v adresári zahrnutého súboru,
ako aj v zozname ciest zadaných pomocou voľby -I.
Zahrnuté súbory môžu zahrňovať ďalšie súbory.
Re2c poskytuje „štandardné“ súbory v adresári include/
projektu — predpokladá sa, že tam budú zhromaždené užitočné definície
regulárnych výrazov, niečo ako štandardná knižnica.
Doteraz bol na požiadanie pridaný súbor s definíciami kategórií Unicode.Pridaná možnosť generovať hlavičkové súbory s ľubovoľným
s obsahom pomocou volieb -t —type-header (alebo príslušných
konfigurácií) a nových direktív /*!header:re2c:on*/ a
/*!header:re2c:off*/. Это может быть полезно в случаях,
kedy re2c musí vygenerovať definície premenných, štruktúr a makier,
ktoré sa používajú v iných prekladoch.Re2c teraz rozumie UTF8-literalom a triedam znakov v regulárnych výrazoch.
Predvolene, re2c analyzuje výrazy ako "∀x ∃y" ako.
sekvenciu 1-bitových ASCII symbolov e2 88 80 78 20 e2 88 83 79
(hex-kódy), a používateľom sa musí ručne escapovať Unicode znaky:
"u2200x u2203y". To je veľmi nepríjemné a neočakávané pre mnohých
používateľov (o čom svedčia stále sa objavujúce bug reporty). Preto teraz
re2c poskytuje možnosť —input-encoding ,
ktorá umožňuje zmeniť správanie a analyzovať "∀x ∃y" ako
2200 78 20 2203 79.Re2c teraz umožňuje používať bežné re2c bloky v režime -r —reuse.
Je to pohodlné, ak vstupný súbor obsahuje veľa blokov a len niektoré z nich
potrebujú opätovné použitie.Objavila sa možnosť nastavovať formát varovaní a chybových hlásení
s novou možnosťou —location-format . GNU formát sa zobrazuje
ako filename:line:column:, zatiaľ čo MSVC formát — ako filename(line,column).
Táto možnosť môže byť užitočná pre milovníkov IDE.
Taktiež bola pridaná možnosť —verbose, ktorá vypisuje krátku víťaznú správu v prípade úspechu.Bol vylepšený režim „kompatibility“ s flex — opravené niektoré chyby analýzy a
nesprávny priority operátorov v zriedkavých prípadoch.
Historicky možnosť -F —flex-support umožňuje písať kód
v zmiešanom štýle flex a re2c, čo sťažuje syntaktické spracovanie.
Režim kompatibility s flex sa zriedka používa v novom kóde,
ale re2c ho naďalej podporuje pre spätnú kompatibilitu.Operátor odčítania symbolových tried / teraz platí
pred spustením kódovania, čo umožňuje jeho použitie v väčšom počte prípadov,
ak je použitá kódovanie s premennou dĺžkou znaku (napríklad UTF8).Výstupný súbor sa teraz vytvára atomárne: re2c najprv vytvorí dočasný súbor
a zapisuje do neho výsledok, a potom premenúva dočasný súbor na výstupný
jednou operáciou.Dokumentácia bola dopísaná a prepracovaná; najmä boli pridané nové
a o spôsoboch kontroly konca vstupných údajov.
Nová dokumentácia je zhromaždená vo forme
vyčerpávajúceho jednotného manuálu
s príkladmi (rovnaké zdrojové súbory sa vykresľujú v manpage a v online dokumentácii).
Boli podniknuté slabé pokusy o zlepšenie čitateľnosti webu na telefónoch.Z pohľadu vývojárov re2c získal lepšiu podpornú subsystémy
debugovania. Ladicí kód je teraz vypnutý v produkčných zostavách a
môže byť zahrnutý pomocou konfigurácie —enable-debug.
Toto vydanie trvalo dlho — takmer celý rok.
Najviac času, ako vždy, bolo venovaného vývoju teoretického základu a písaniu
článku „Efficient POSIX Submatch Extraction on NFA“.
Algoritmy opísané v článku sú implementované v experimentálnej knižnici libre2c
(kompilácia knižnice a benchmarkov je predvolene vypnutá a zapína sa konfiguráciou—enable-libs). Knižnica nie je navrhnutá ako konkurencia existujúcim
projektom ako RE2, ale ako výskumná platforma na vývoj nových
algoritmov (ktoré sa potom môžu použiť v re2c alebo v iných projektoch).
Taktiež je to výhodné z hľadiska testovania, benchmarkov a vytvárania bindingov k iným jazykov.
Ďakujeme od vývojárov re2c všetkým, ktorí pomohli, aby sa tento release uskutočnil,
a celkovo komunite za nápady, bug reporty, patche, bojového ducha atď. ;]
V piatok 2. augusta vyšiel release re2c — voľného generátora lexikálnych analyzátorov pre jazyky C a C++.
Zdroj: linux.org.ru
