re2c 1.2

V petek, 2. avgusta, je izšla izdaja re2c, brezplačnega generatorja leksikalnih analizatorjev za jezika C in C++. Re2c je leta 1993 napisal Peter Bamboulis kot eksperimentalni generator zelo hitrih leksikalnih analizatorjev, ki se od drugih generatorjev loči po hitrosti generirane kode in neobičajno prilagodljivem uporabniškem vmesniku, ki omogoča preprosto in učinkovito vgradnjo analizatorjev v obstoječo kodno bazo. Od takrat je projekt razvijala skupnost in je še naprej platforma za eksperimente in raziskave na področju formalnih slovnic in končnih avtomatov.

Glavne novosti v različici 1.2:

  • Dodan je nov (poenostavljen) način preverjanja konca vnosnih podatkov
    (angleško "pravilo EOF").
    Za to je bila dodana konfiguracija re2c:eof,
    omogoča izbiro terminalskega znaka,
    in posebno pravilo $, ki se sproži, če lexer
    uspešno dosegel konec vnesenih podatkov.
    V preteklosti ponuja re2c izbiro več metod preverjanja za
    konec vložkov, ki se razlikujejo po omejitvah, učinkovitosti in preprostosti
    aplikacije. Nova metoda je zasnovana za poenostavitev pisanja kode, medtem ko
    hkrati pa ostajajo učinkoviti in široko uporabni. Stari načini
    še vedno deluje in ima v nekaterih primerih prednost.

  • Dodana možnost vključitve zunanjih datotek z uporabo direktive
    /*!include:re2c "file.re" */ kjer je file.re
    to je ime vključene datoteke. Re2c išče datoteke v imeniku vključno z datotekami,
    kot tudi na seznamu poti, določenih z možnostjo -I.
    Vključene datoteke lahko vključujejo druge datoteke.
    Re2c ponuja "standardne" datoteke v imeniku include/
    projekt - tam se bodo predvidoma kopičile uporabne definicije
    regularni izrazi, nekaj podobnega standardni knjižnici.
    Doslej je bila na željo delavcev dodana ena datoteka z definicijami Unicode kategorij.

  • Dodana možnost generiranja datotek glave s poljubnimi
    vsebino z možnostmi -t --type-header (ali ustrezno
    konfiguracije) in nove direktive /*!header:re2c:on*/ in
    /*!header:re2c:off*/. To je lahko koristno v primerih, ko
    ko mora re2c ustvariti definicije spremenljivk, struktur in makrov,
    uporabljen v drugih prevodnih enotah.

  • Re2c zdaj razume literale UTF8 in razrede znakov v regularnih izrazih.
    Privzeto re2c razčleni izraze, kot je "∀x ∃y" kot.
    zaporedje 1-bitnih znakov ASCII e2 88 80 78 20 e2 88 83 79
    (šestnajstiške kode), uporabniki pa morajo znake Unicode ubežati ročno:
    "u2200x u2203y". To je za mnoge zelo neprijetno in nepričakovano
    uporabnikov (kar dokazujejo stalna poročila o napakah). In zdaj
    re2c nudi možnost --input-encoding ,
    ki vam omogoča, da spremenite vedenje in razčlenite "∀x ∃y" kot
    2200 78 20 2203 79.

  • Re2c zdaj omogoča uporabo navadnih blokov re2c v načinu -r --reuse.
    To je priročno, če vhodna datoteka vsebuje veliko blokov in samo nekatere od njih
    je treba ponovno uporabiti.

  • Zdaj lahko nastavite obliko opozoril in sporočil o napakah
    z uporabo nove možnosti --location-format . Prikaže se format GNU
    kot ime datoteke:vrstica:stolpec: in format MSVC kot ime datoteke(vrstica,stolpec).
    Ta funkcija je lahko uporabna za ljubitelje IDE.
    Dodana je bila tudi možnost --verbose, ki v primeru uspeha natisne kratko zmagovalno sporočilo.

  • Način "združljivosti" s flexom je bil izboljšan - nekatere napake pri razčlenjevanju so bile odpravljene in
    v redkih primerih nepravilna prednost operaterja.
    V preteklosti je možnost -F --flex-support omogočala pisanje kode
    pomešan v slogu flex in slogu re2c, kar nekoliko oteži razčlenjevanje.
    Način združljivosti Flex se redko uporablja v novi kodi,
    vendar ga re2c še naprej podpira zaradi združljivosti za nazaj.

  • Zdaj velja operator odštevanja znakovnega razreda /
    pred razširitvijo kodiranja, ki omogoča uporabo v večjem številu primerov,
    če je uporabljeno kodiranje s spremenljivo dolžino znakov (na primer UTF8).

  • Izhodna datoteka je zdaj ustvarjena atomsko: re2c najprej ustvari začasno datoteko
    in vanjo zapiše rezultat, nato pa začasno datoteko preimenuje v izhod
    ena operacija.

  • Dokumentacija je bila dopolnjena in prepisana; zlasti so bile dodane nove
    poglavja o polnjenju medpomnilnika
    и o načinih preverjanja konca vhodnih podatkov.
    Nova dokumentacija se zbira v obrazcu
    obsežen priročnik na eni strani
    s primeri (isti viri so upodobljeni na strani priročnika in v spletni dokumentaciji).
    Slabi poskusi so bili narejeni za izboljšanje berljivosti strani na telefonih.

  • Z vidika razvijalcev je re2c pridobil popolnejši podsistem
    odpravljanje napak Koda za odpravljanje napak je zdaj onemogočena v različicah izdaje in
    lahko omogočite z možnostjo konfiguracije --enable-debug.

Ta izdaja je trajala dolgo - skoraj celo leto.
Največ časa je, kot vedno, namenjenega razvoju teoretičnega okvira in pisanju
Člen "Učinkovito ekstrakcijo submatch POSIX na NFA".
Algoritmi, opisani v članku, so implementirani v eksperimentalni knjižnici libre2c
(gradnja knjižnice in primerjalnih testov je privzeto onemogočena in omogočena z možnostjo konfiguracije
--enable-libs). Knjižnica ni zamišljena kot konkurenca obstoječi
projektov, kot je RE2, ampak kot raziskovalna platforma za razvoj novih
algoritmi (ki jih je nato mogoče uporabiti v re2c ali v drugih projektih).
Priročen je tudi z vidika testiranja, primerjalnih testov in ustvarjanja vezav na druge jezike.

Zahvala razvijalcev re2c vsem, ki so pomagali do te izdaje,
in skupnosti na splošno za ideje, poročila o napakah, popravke, moralo itd. ;]

Vir: linux.org.ru

Dodaj komentar