Vydání generátoru lexikálních analyzátorů re2c 1.2

Proběhlo vydání re2c, volného generátoru lexikálních analyzátorů pro jazyky C a C++. Připomínáme, že re2c byl napsán v roce 1993 Peterem Bambulisem jako experimentální generátor velmi rychlých lexikálních analyzátorů, který se od ostatních generátorů liší rychlostí vygenerovaného kódu a neobvykle flexibilním uživatelským rozhraním, které umožňuje snadnou a efektivní integraci analyzátorů do stávající kódové základny. Od té doby projekt pokračuje ve vývoji komunitou a stále zůstává místem pro experimenty a výzkum v oblasti formálních gramatik a konečných automatů.

Příprava vydání trvala téměř celý rok. Většina času, jak je obvyklé, byla věnována vývoji teoretické základny a psaní
článku „Efficient POSIX Submatch Extraction on NFA«.
Algoritmy popsané v článku jsou implementovány v experimentální knihovně libre2c
(kompilace knihovny a testy výkonu jsou ve výchozím nastavení zakázány a lze je povolit pomocí konfigurační volby „—enable-libs“). Knihovna není zamýšlena jako konkurent již existujícím projektům, jako je RE2, ale jako výzkumná platforma pro vývoj nových
algoritmů (které mohou být následně použity v re2c nebo v jiných projektech). To je také výhodné z hlediska testování, měření výkonu a vytváření vazeb pro jiné jazyky.

Hlavní novinky verze re2c 1.2:

  • Byl přidán nový zjednodušený způsob kontroly konce vstupních dat („EOF rule“). K tomu byla přidána konfigurace „re2c:eof“,
    která umožňuje zvolit terminální znak,
    a speciální pravidlo „$“, které se aktivuje, pokud lexer
    úspěšně dosáhne konce vstupních dat.
    Historicky re2c nabízí několik způsobů, jak zkontrolovat
    konec vstupních dat, které se liší podle omezení, efektivity a jednoduchosti
    použití. Nový způsob má za cíl zjednodušit psaní kódu, přičemž
    zůstává efektivní a široce použitelný. Staré způsoby
    stále fungují a mohou být v některých případech preferovány.
  • Byla přidána možnost zahrnutí externích souborů pomocí direktivy
    „/*!include:re2c "file.re" */“, kde „file.re“ je název zahrnutého souboru. Re2c hledá soubory ve složce zahrnujícího souboru,
    a také v seznamu cest určených pomocí volby „-I“.
    Zahrnuté soubory mohou zahrnovat další soubory.
    Re2c poskytuje „standardní“ soubory ve složce „include/“
    projektu – předpokládá se, že tam budou shromažďovány užitečné definice
    regulárních výrazů, něco na způsob standardní knihovny.
    Zatím byla na základě žádostí přidána jedna soubor s definicemi kategorií Unicode.
  • Byla přidána možnost generovat hlavičkové soubory s libovolným
    s obsahem pomocí voleb „-t —type-header“ (nebo odpovídajících
    konfigurací) a nových direktiv „/*!header:re2c:on*/“ a
    „/*!header:re2c:off*/“. To může být užitečné v případech,
    když re2c má generovat definice proměnných, struktur a makro,
    které se používají v jiných překladačích.
  • Re2c nyní rozumí UTF8 literálům a třídám znaků v regulárních výrazech.
    Ve výchozím nastavení re2c parsuje výrazy jako „∀x ∃y“ jako
    sekvenci 1-bitových ASCII znaků „e2 88 80 78 20 e2 88 83 79“
    (hex-kódy), a uživatelé musí ručně escapovat Unicode znaky:
    „\\u2200x \\u2203y“. To je pro mnohé
    což dokazují neustálé reporty chyb. Proto nyní
    re2c poskytuje volbu „—input-encoding {ascii | utf8}“
    která umožňuje změnit chování a parsovat „∀x ∃y“ jako
    „2200 78 20 2203 79“.
  • Re2c nyní umožňuje používat běžné re2c bloky v režimu „-r —reuse“.
    To je užitečné, pokud vstupní soubor obsahuje mnoho bloků a pouze část z nich
    potřebuje opětovné použití.
  • Byla přidána možnost nastavovat formát varování a chybových zpráv
    pomocí nové volby „—location-format {gnu | msvc}“. GNU formát se zobrazuje
    jako „filename:line:column:“, zatímco formát MSVC — jako „filename(line,column)“.
    Tato funkce se může hodit milovníkům IDE.
    Byla také přidána možnost „—verbose“, která zobrazí stručnou úspěšnou zprávu v případě úspěchu.
  • Režim „kompatibility“ s flex byl vylepšen — byly opraveny některé chyby analýzy a
    nesprávná priorita operatorů v ojedinělých případech.
    Historicky možnost „-F —flex-suppor“ umožňuje psát kód
    smíšeně ve stylu flex a ve stylu re2c, což poněkud komplikuje syntaktickou analýzu.
    Režim kompatibility s flex se vzácně používá v novém kódu,
    ale re2c jej i nadále podporuje pro zpětnou kompatibilitu.
  • Operátor odečítání znakových tříd „/“ se nyní uplatňuje
    před rozbalením kódování, což umožňuje jeho použití ve větším počtu případů,
    pokud se používá kódování s proměnlivou délkou znaku (například UTF8).
  • Výstupní soubor je nyní vytvářen atomárně: re2c nejprve vytvoří dočasný soubor
    a zapíše do něj výsledek, a poté přejmenuje dočasný soubor na výstupní
    v jedné operaci.
  • Dokumentace byla doplněna a přepracována; zejména byly přidány nové
    kapitoly o http://re2c.org/manual/manual.html#buffer-refilling naplnění vyrovnávací paměti
    a o způsobech kontroly konce vstupních dat.
    Nová dokumentace byla shromážděna jako
    vyčerpávající jednoho stránkového průvodce
    s příklady (ty stejné zdrojové materiály jsou vykreslovány v manpage a v online dokumentaci).
    Byly učiněny slabé pokusy o zlepšení čitelnosti webu na telefonech.
  • Z pohledu vývojářů re2c získal plnohodnotnější subsystém.
    ladění. Ladicí kód je nyní v uvolněných sestaveních vypnutý a
    lze povolit pomocí konfigurační možnosti „—enable-debug“.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster