V piatok 2. augusta bola vydaná verzia re2c, bezplatného generátora lexikálnych analyzátorov pre jazyky C a C++. Pripomíname, že re2c napísal v roku 1993 Peter Bamboulis ako experimentálny generátor veľmi rýchlych lexikálnych analyzátorov, ktorý sa od ostatných generátorov odlišuje rýchlosťou generovaného kódu a nezvyčajne flexibilným používateľským rozhraním, ktoré umožňuje jednoduché a efektívne začlenenie analyzátorov do existujúcu kódovú základňu. Odvtedy bol projekt vyvíjaný komunitou a naďalej je platformou pre experimenty a výskum v oblasti formálnych gramatík a konečných automatov.
Hlavné inovácie vo verzii 1.2:
Pridaný nový (zjednodušený) spôsob kontroly konca vstupných údajov
(anglické „pravidlo EOF“).
Na tento účel bola pridaná konfigurácia re2c:eof,
umožňuje vybrať koncový znak,
a špeciálne pravidlo $, ktoré sa spustí, ak lexer
úspešne dosiahol koniec vstupných údajov.
Historicky re2c poskytuje výber z niekoľkých metód overovania
koniec vstupov sa líši v obmedzenosti, účinnosti a jednoduchosti
aplikácie. Nová metóda je navrhnutá tak, aby zjednodušila písanie kódu
pričom zostávajú účinné a široko použiteľné. Staré spôsoby
stále fungujú a v niektorých prípadoch môžu byť preferované.
Pridaná možnosť zahrnúť externé súbory pomocou direktívy
/*!include:re2c "file.re" */ kde file.re
toto je názov zahrnutého súboru. Re2c hľadá súbory v adresári vrátane súboru,
ako aj v zozname ciest špecifikovaných pomocou voľby -I.
Zahrnuté súbory môžu obsahovať ďalšie súbory.
Re2c poskytuje "štandardné" súbory v adresári include/
projekt - očakáva sa, že sa tam nahromadia užitočné definície
regulárne výrazy, niečo ako štandardná knižnica.
Zatiaľ na žiadosť pracovníkov pribudol jeden súbor s definíciami Unicode kategórií.
Pridaná možnosť vytvárať hlavičkové súbory s ľubovoľným
obsahu pomocou volieb -t --type-header (alebo vhodných
konfigurácie) a nové smernice /*!header:re2c:on*/ a
/*!header:re2c:off*/. To môže byť užitočné v prípadoch, keď
keď re2c potrebuje generovať definície premenných, štruktúr a makier,
používané v iných prekladových jednotkách.
Re2c teraz rozumie literálom UTF8 a triedam znakov v regulárnych výrazoch.
V predvolenom nastavení re2c analyzuje výrazy ako "∀x ∃y" ako.
sekvencia 1-bitových znakov ASCII e2 88 80 78 20 e2 88 83 79
(hexadecimálne kódy) a používatelia musia znaky Unicode escapovať manuálne:
"u2200x u2203y". To je pre mnohých veľmi nepohodlné a neočakávané
používateľov (čo dokazujú neustále hlásenia o chybách). Tak teraz
re2c poskytuje možnosť kódovania --input-encoding ,
čo vám umožňuje zmeniť správanie a analyzovať "∀x ∃y" ako
2200 78 20 2203 79.
Re2c teraz umožňuje použitie bežných blokov re2c v režime -r --reuse.
To je výhodné, ak vstupný súbor obsahuje veľa blokov a iba niektoré z nich
je potrebné znovu použiť.
Teraz môžete nastaviť formát varovaní a chybových hlásení
pomocou novej možnosti --location-format . Zobrazí sa formát GNU
ako názov_súboru:riadok:stĺpec: a formát MSVC ako názov_súboru(riadok,stĺpec).
Táto funkcia môže byť užitočná pre milovníkov IDE.
Bola tiež pridaná možnosť --verbose, ktorá v prípade úspechu vytlačí krátku správu o víťazstve.
Režim "kompatibility" s flexom bol vylepšený - boli opravené niektoré chyby analýzy a
v zriedkavých prípadoch nesprávna priorita operátora.
Historicky vám možnosť -F --flex-support umožňovala písať kód
zmiešané v štýle flex a štýlu re2c, čo trochu sťažuje analýzu.
Režim kompatibility Flex sa v novom kóde používa zriedka,
ale re2c ho naďalej podporuje kvôli spätnej kompatibilite.
Teraz platí operátor odčítania triedy znakov /
pred rozšírením kódovania, čo umožňuje jeho použitie vo väčšom počte prípadov,
ak sa používa kódovanie s premenlivou dĺžkou znakov (napríklad UTF8).
Výstupný súbor je teraz vytvorený atomicky: re2c najskôr vytvorí dočasný súbor
a zapíše do neho výsledok a potom premenuje dočasný súbor na výstup
jedna operácia.
Z pohľadu vývojárov získal re2c úplnejší subsystém
ladenie Ladiaci kód je teraz zakázaný v zostavách vydaní a
možno povoliť pomocou možnosti configure --enable-debug.
Toto vydanie trvalo dlho - takmer celý rok.
Väčšinu času, ako vždy, venovali vývoju teoretického rámca a písaniu
Článok "Efektívna extrakcia submatch POSIX na NFA".
Algoritmy opísané v článku sú implementované v experimentálnej knižnici libre2c
(tvorba knižnice a benchmarkov je predvolene vypnutá a je povolená voľbou configure
--enable-libs). Knižnica nie je koncipovaná ako konkurencia existujúcej
projekty ako RE2, ale ako výskumná platforma pre vývoj nových
algoritmy (ktoré potom možno použiť v re2c alebo v iných projektoch).
Je to pohodlné aj z pohľadu testovania, benchmarkov a vytvárania väzieb na iné jazyky.
Vďaka vývojárom re2c všetkým, ktorí pomohli k tomuto vydaniu,
a komunite všeobecne za nápady, hlásenia chýb, záplaty, morálku atď. ;]