re2c 1.2

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.

  • Dokumentácia bola dokončená a prepísaná; najmä pribudli nové
    kapitoly o naplnení vyrovnávacej pamäte
    и o spôsoboch kontroly konca vstupných údajov.
    Nová dokumentácia sa zhromažďuje vo formulári
    komplexný jednostranový manuál
    s príkladmi (rovnaké zdroje sú zobrazené na manuálovej stránke a v online dokumentácii).
    Boli vykonané slabé pokusy zlepšiť čitateľnosť stránky na telefónoch.

  • 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ď. ;]

Zdroj: linux.org.ru

Pridať komentár