re2c 1.2

V pátek 2. srpna byl vydán re2c – volný generátor lexikálních analyzátorů pro jazyky C a C++. Připomeň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í generovaného kódu a neobvykle flexibilním uživatelským rozhraním, které umožňuje snadno a efektivně integrovat analyzátory do stávající kódové základny. Od té doby projekt vyvíjí komunita a stále zůstává místem pro experimenty a výzkum v oblasti formálních gramatik a konečných automatů.

Hlavní novinky ve verzi 1.2:

  • Byl přidán nový (zjednodušený) způsob kontroly na konec vstupních dat
    (angl. „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" */, где file.re
    je to název zahrnutého souboru. Re2c hledá soubory ve složce zahrnujícího souboru,
    a také v seznamu cest zadaný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
    obsahem pomocí možností -t —type-header (nebo odpovídajících
    konfigurací) a nových direktiv /*!header:re2c:on*/ a
    /*!header:re2c:off*/. Это может быть полезно в случаях,
    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 analyzuje výrazy jako "∀x ∃y" jako.
    sekvenci 1bitový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é uživatele velmi nepohodlné a nečekané,
    což dokazují neustálé reporty chyb. Proto nyní
    re2c poskytuje možnost —input-encoding ,
    která umožňuje změnit chování a analyzovat "∀x ∃y" jako
    2200 78 20 2203 79.

  • Re2c nyní umožňuje používat standardní 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é možnosti —location-format . Formát GNU 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.
    Také byla přidána možnost —verbose, která vypisuje krátkou vítěznou zprávu v případě úspěchu.

  • Byl vylepšen režim „kompatibility“ s flex — byly opraveny některé chyby analýzy a
    nesprávná priorita operatorů v ojedinělých případech.
    Historicky opce -F —flex-support 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 odčítání znakových tříd / nyní platí
    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 vyplňování bufferu
    a o způsobech kontroly konce vstupních dat.
    Nová dokumentace byla shromážděna jako
    vyčerpávající jednopageový manuál
    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
    může být aktivován pomocí konfigurační možnosti —enable-debug.

Tato verze trvala dlouho — téměř celý rok.
Většina času, jako vždy, byla věnována vývoji teoretického základu a psaní
na stránkách Maven Apache Project „Efficient POSIX Submatch Extraction on NFA“.
Algoritmy popsané v článku jsou implementovány v experimentální knihovně libre2c
(sestavení knihovny a benchmarků je ve výchozím nastavení vypnuto a může být zapnuto pomocí konfigurační možnosti
—enable-libs). Knihovna není zamýšlena jako konkurent již existujícím
projektům jako RE2, ale jako výzkumná platforma pro vývoj nových
algoritmů (které mohou být později použity v re2c nebo v jiných projektech).
Také je to užitečné z hlediska testování, benchmarkingu a vytváření vazeb na jiné jazyky.

Děkujeme od vývojářů re2c všem, kteří pomohli k tomu, aby tato verze vznikla,
a celému komunitnímu prostředí za nápady, reporty chyb, patche, bojového ducha atd. ;]

Zdroj: linux.org.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