uvoľnenie , slobodného generátora lexikálnych analyzátorov pre jazyky C a C++. Pripomeňme, že re2c bol napísaný v roku 1993 Petrom Bambulisom ako experimentálny generátor veľmi rýchlych lexikálnych analyzátorov, odlišujúci sa od ostatných generátorov rýchlosťou vygenerovaného kódu a nezvyčajne flexibilným používateľským rozhraním, ktoré umožňuje ľahko a efektívne integrovať analyzátory do existujúcej kódovej základne. Odvtedy projekt pokračuje vo vývoji prostredníctvom komunity a naďalej zostáva miestom pre experimenty a výskum v oblasti formálnych gramatík a konečných automatov.
Príprava vydania trvala takmer celý rok. Väčšina času, ako vždy, bola vynaložená na vývoj teoretického základu a písanie
článku „«.
Algoritmy opísané v článku sú implementované v experimentálnej knižnici libre2c
(kompilácia knižnice a testy výkonu sú predvolene vypnuté a aktivujú sa pomocou konfiguračnej voľby „—enable-libs“). Knižnica nie je navrhnutá ako konkurent už existujúcim projektom, ako je RE2, ale ako výskumná platforma na vývoj nových
algoritmov (ktoré sa potom môžu používať v re2c alebo v iných projektoch). Tiež je to praktické z hľadiska testovania, merania výkonu a vytvárania väzieb na iné jazyky.
Hlavné novinky vo verzii re2c 1.2:
- Pridaný nový zjednodušený spôsob kontroly konca vstupných údajov („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“ */“, kde „file.re“ je názov zahrnovaného súboru. Re2c hľadá súbory v adresári zahrňujúceho súboru,
ako aj v zozname ciest určený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
obsahom pomocou volieb „-t —type-header“ (alebo súvisiacich
konfigurácií) a nových direktív „/*!header:re2c:on*/“ a
„/*!header:re2c:off*/“. To môže byť užitočné v prípadoch,
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 spracováva výrazy ako „∀x ∃y“ ako
sekvenciu 1-bitových ASCII znakov „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 nečakané pre mnohých
používateľov (o čom svedčia stále sa objavujúce bug reporty). Preto teraz
re2c poskytuje voľbu „—input-encoding {ascii | utf8}“,
ktorá umožňuje zmeniť správanie a spracovať „∀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 pomocou novej voľby „—location-format {gnu | msvc}“. GNU formát je zobrazený
ako „filename:line:column:“, a MSVC formát — ako „filename(line,column)“.
Táto možnosť môže byť užitočná pre milovníkov IDE.
Tiež bola pridaná voľba „—verbose“, ktorá zobrazuje stručnú víťaznú správu v prípade úspechu. - Vylepšený režim „kompatibility“ s flex — opravené niektoré chyby rozpoznávania a
nesprávny priority operátorov v zriedkavých prípadoch.
Historicky voľba „-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 tried znakov „/“ sa teraz aplikuje
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é
kapitoly o
a .
Nová dokumentácia je zhromaždená vo forme
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ť zapnutý pomocou možnosti configure „—enable-debug“.
Zdroj: opennet.ru
