re2c 1.2

V petek, 2. avgusta, je izšla različica re2c — prosti generator leksikalnih analizatorjev za jezike C in C++. Spomnimo, da je re2c leta 1993 napisal Peter Bambulys kot eksperimentalni generator zelo hitrih leksikalnih analizatorjev, ki se od drugih generatorjev razlikuje po hitrosti ustvarjenega kode in nenavadno prilagodljivem uporabniškem vmesniku, ki omogoča enostavno in učinkovito vključevanje analizatorjev v obstoječo kodo. Od takrat se projekt razvija v okviru skupnosti in ostaja platforma za eksperimentiranje in raziskovanje na področju formalnih gramatik in končnih avtomatov.

Glavne novosti v različici 1.2:

  • Dodana je bila nova (poenostavljena) metoda preverjanja konca vhodnih podatkov
    (ang. 'EOF rule').
    Za to je bila dodana konfiguracija re2c:eof,
    ki omogoča izbiro terminalnega znaka,
    in posebno pravilo $, ki se sproži, če leksik.
    uspešno doseže konec vhodnih podatkov.
    Zgodovinsko re2c ponuja več načinov preverjanja
    konec vhodnih podatkov, ki se razlikujejo po omejenosti, učinkovitosti in enostavnosti
    uporabe. Nova metoda je zasnovana za poenostavitev pisanja kode, hkrati pa
    ostaja učinkovita in široko uporabna. Stare metode
    še vedno delujejo in so lahko prednostne v nekaterih primerih.

  • Dodana je možnost vključevanja zunanjih datotek z uporabo direktive
    /*!include:re2c "file.re" */, где file.re
    to je ime vključene datoteke. Re2c išče datoteke v imeniku vključene datoteke,
    prav tako pa v seznamu poti, določenih s pomočjo možnosti -I.
    Vključene datoteke lahko vključujejo druge datoteke.
    Re2c zagotavlja 'standarne' datoteke v direktoriju include/
    projekta — predvideva se, da se tam bodo zbirale uporabne definicije
    rednih izrazov, nekaj v duhu standardne knjižnice.
    Zaenkrat je na prošnje uporabnikov dodana ena datoteka z definicijami kategorij Unicode.

  • Dodana je možnost generirati raziskovalne datoteke s poljubnim
    vsebino z uporabo možnosti -t —type-header (ali ustrezne
    konfiguracije) in novih direktiv /*!header:re2c:on*/ in
    /*!header:re2c:off*/. Это может быть полезно в случаях,
    ko re2c mora generirati definicije spremenljivk, struktur in makrov,
    ki se uporabljajo v drugih enotah prevajanja.

  • Re2c zdaj razume UTF8-literalne in razrede znakov v rednih izrazih.
    Privzeto re2c analizira izraze, kot je "∀x ∃y", kot.
    zaporedje 1-bitnih ASCII simbolov e2 88 80 78 20 e2 88 83 79
    (heks-kode), in uporabniki morajo ročno pobegniti Unicode-znake:
    "u2200x u2203y". To je zelo neprijetno in presenetljivo za mnoge,
    uporabnike (kar dokazuje stalno poročanje o napakah). Zato zdaj
    re2c ponuja možnost —input-encoding ,
    ki omogoča spreminjanje vedenja in razčlenitev "∀x ∃y" kot
    2200 78 20 2203 79.

  • Re2c zdaj omogoča uporabo običajnih re2c blokov v načinu -r —reuse.
    To je priročno, če vhodna datoteka vsebuje veliko blokov, in le del njih
    potrebuje ponovno uporabo.

  • Pojavila se je možnost nastavitve formata opozoril in sporočil o napakah
    s pomočjo nove možnosti —location-format . GNU format je prikazan
    kot filename:line:column:, msvc format pa kot filename(line,column).
    Ta možnost je lahko koristna ljubiteljem IDE.
    Dodana je bila tudi možnost —verbose, ki izpisuje kratko zmagovalno sporočilo v primeru uspeha.

  • Bila je izboljšana 'kompatibilnost' z flex — odpravljene so bile nekatere napake razčlembe in
    napačna prioriteta operatorjev v redkih primerih.
    Zgodovinsko je možnost -F —flex-support omogočila pisanje kode
    v mešanem slogu flex in re2c, kar nekoliko oteži sintaktično analizo.
    Način združljivosti s flex redko uporablja nov koda,
    a re2c ga še naprej podpira za obratno združljivost.

  • Operater odštevanja simbolnih razredov / se zdaj uporablja
    pred razvojem kodiranja, ki omogoča njegovo uporabo v več primerih,
    če se uporablja kodiranje z spremenljivo dolžino znaka (na primer UTF8).

  • Izhodna datoteka se zdaj ustvari atomarno: re2c najprej ustvari začasno datoteko
    in vanjo zapiše rezultat, nato pa preimenuje začasno datoteko v izhodno
    v enem koraku.

  • Dokumentacija je bila dopisana in prepisana; zlasti so dodane nove
    poglavje o polnjenju bližnjega pomnilnika
    in o načinih preverjanja konca vhodnih podatkov.
    Nova dokumentacija je zbrana v obliki
    izčrpnega enostranskega priročnika
    s primeri (isti izvorni kodo se prikaže v manpage in v spletnem dokumentu).
    Bile so narejene šibke poskuse izboljšati berljivost spletne strani na telefonih.

  • Z vidika razvijalcev je re2c pridobil bolj celovito podsystemsko
    odpravljanje napak. Koda za odpravljanje napak je zdaj onemogočena v izdajalnih gradnjah in
    lahko pa se vključi s konfiguracijsko možnostjo —enable-debug.

Ta različica je vzela dolgo časa — skoraj celo leto.
Večina časa, kot vedno, je šla za razvojem teoretične osnove in pisanje
članka "Efficient POSIX Submatch Extraction on NFA".
Algoritmi, opisani v članku, so uresničeni v eksperimentalni knjižnici libre2c
(kompilacija biblioteke i benchmarka je prema zadanim postavkama isključena i uključuje se configure opcijom
—enable-libs). Biblioteka nije zamišljena kao konkurent postojećim
projektima poput RE2, već kao istraživačka platforma za razvoj novih
algoritama (koji se potom mogu koristiti u re2c ili drugim projektima).
Također je korisno s aspekta testiranja, benchmarka i izrade poveznica na druge jezike.

Zahvaljujemo od developera re2c svima koji su pomogli da ovaj izdanak postane stvarnost,
i u cjelini zajednici za ideje, izvještaje o greškama, zakrpe, borbeni duh itd. ;]

Izvor: linux.org.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster