Vydanie generátora lexikálneho analyzátora re2c 1.2

uskutočnilo sa uvoľnenie re2c, bezplatný generátor lexikálneho analyzátora pre jazyky C a C++. Pripomeňme, že re2c napísal v roku 1993 Peter Bambulis ako experimentálny generátor veľmi rýchlych lexikálnych analyzátorov, líšiacich sa od iných generátorov rýchlosťou generovaného kódu a nezvyčajne flexibilným užívateľským rozhraním, ktoré umožňuje analyzátory jednoducho a efektívne integrovať do existujúceho kódu. 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.

Príprava na vydanie trvala takmer celý rok. Väčšinu času, ako vždy, venovali vývoju teoretického rámca a písaniu
články"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 testov výkonu sú štandardne zakázané a sú povolené konfiguračnou voľbou „—enable-libs“). Knižnica nie je určená ako konkurencia existujúcich projektov, ako je 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, merania výkonu a vytvárania väzieb na iné jazyky.

Hlavné inovácie vo verzii re2c 1.2:

  • Pridaná nová zjednodušená metóda kontroly konca vstupných údajov („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" je názov súboru, ktorý sa má zahrnúť. 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 možností "-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ť "--input-encoding {ascii | utf8}",
    č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 {gnu | msvc}. 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 pridaná aj možnosť „--verbose“, ktorá v prípade úspechu zobrazí 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 http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и o spôsoboch kontroly konca vstupných údajov.
    Nová dokumentácia sa zhromažďuje vo formulári
    komplexného jednostranového sprievodcu
    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 konfigurácie "--enable-debug".

Zdroj: opennet.ru

Pridať komentár