re2c 1.2

U petak, 2. kolovoza, objavljeno je izdanje re2c, besplatnog generatora leksičkih analizatora za jezike C i C++. Podsjetimo, re2c je 1993. godine napisao Peter Bamboulis kao eksperimentalni generator vrlo brzih leksičkih analizatora, koji se od drugih generatora razlikuje po brzini generiranog koda i neobično fleksibilnom korisničkom sučelju koje omogućuje jednostavno i učinkovito ugrađivanje analizatora u postojeću bazu kodova. Od tada je projekt razvijala zajednica i nastavlja biti platforma za eksperimente i istraživanja u području formalnih gramatika i konačnih automata.

Glavne inovacije u verziji 1.2:

  • Dodan je novi (pojednostavljeni) način provjere kraja ulaznih podataka
    (englesko “EOF pravilo”).
    Za to je dodana konfiguracija re2c:eof,
    omogućuje odabir znaka terminala,
    i posebno $ pravilo koje se aktivira ako lexer
    uspješno došao do kraja ulaznih podataka.
    Povijesno gledano, re2c nudi izbor nekoliko metoda verifikacije za
    kraj inputa koji se razlikuju po ograničenjima, učinkovitosti i jednostavnosti
    aplikacije. Nova metoda dizajnirana je za pojednostavljenje pisanja koda, dok
    ostajući učinkoviti i široko primjenjivi. Stari načini
    i dalje radi i može biti poželjan u nekim slučajevima.

  • Dodana je mogućnost uključivanja vanjskih datoteka pomoću direktive
    /*!include:re2c "file.re" */ gdje je file.re
    ovo je naziv uključene datoteke. Re2c traži datoteke u direktoriju uključujući datoteke,
    kao i u popisu staza navedenih pomoću opcije -I.
    Uključene datoteke mogu uključivati ​​druge datoteke.
    Re2c pruža "standardne" datoteke u direktoriju include/
    projekt - očekuje se da će se tu akumulirati korisne definicije
    regularni izrazi, nešto poput standardne knjižnice.
    Do sada je na zahtjev radnika dodana jedna datoteka s definicijama Unicode kategorija.

  • Dodana mogućnost generiranja datoteka zaglavlja s proizvoljnim
    sadržaj koristeći opcije -t --type-header (ili odgovarajuće
    konfiguracije) i nove direktive /*!header:re2c:on*/ i
    /*!zaglavlje:re2c:isključeno*/. Ovo može biti korisno u slučajevima kada
    kada re2c treba generirati definicije varijabli, struktura i makronaredbi,
    koristi se u drugim prijevodnim jedinicama.

  • Re2c sada razumije UTF8 literale i klase znakova u regularnim izrazima.
    Prema zadanim postavkama, re2c analizira izraze poput "∀x ∃y" kao.
    slijed 1-bitnih ASCII znakova e2 88 80 78 20 e2 88 83 79
    (hex kodovi), a korisnici moraju ručno izbjeći Unicode znakove:
    "u2200x u2203y". To je za mnoge vrlo nezgodno i neočekivano
    korisnika (kao što svjedoče stalna izvješća o greškama). Pa sada
    re2c pruža opciju --input-encoding ,
    što vam omogućuje da promijenite ponašanje i raščlanite "∀x ∃y" kao
    2200 78 20 2203 79.

  • Re2c sada dopušta korištenje uobičajenih re2c blokova u načinu -r --reuse.
    Ovo je zgodno ako ulazna datoteka sadrži mnogo blokova i samo neke od njih
    treba ponovno upotrijebiti.

  • Sada možete postaviti format upozorenja i poruka o pogrešci
    pomoću nove opcije --location-format . Prikazuje se GNU format
    kao filename:line:column:, a MSVC format kao filename(line,column).
    Ova značajka može biti korisna za ljubitelje IDE.
    Također je dodana opcija --verbose, koja ispisuje kratku pobjedničku poruku ako je uspješna.

  • Način rada "kompatibilnosti" s flexom je poboljšan - neke pogreške parsiranja su ispravljene i
    netočan prioritet operatora u rijetkim slučajevima.
    Povijesno gledano, opcija -F --flex-support omogućavala vam je pisanje koda
    pomiješan u stilu flex i re2c stilu, što malo otežava raščlanjivanje.
    Način rada Flex kompatibilnosti rijetko se koristi u novom kodu,
    ali re2c ga nastavlja podržavati radi kompatibilnosti unazad.

  • Sada se primjenjuje operator oduzimanja klase znakova /
    prije proširenja kodiranja, što omogućuje korištenje u većem broju slučajeva,
    ako se koristi kodiranje promjenjive duljine znakova (na primjer UTF8).

  • Izlazna datoteka sada se stvara atomski: re2c prvo stvara privremenu datoteku
    i zapisuje rezultat u nju, a zatim preimenuje privremenu datoteku u izlaz
    jedna operacija.

  • Dokumentacija je dovršena i prerađena; posebice su dodane nove
    poglavlja o punjenju međuspremnika
    и o načinima provjere kraja ulaznih podataka.
    Nova dokumentacija prikuplja se u obrascu
    opsežan priručnik na jednoj stranici
    s primjerima (isti su izvori prikazani na stranici priručnika iu online dokumentaciji).
    Učinjeni su loši pokušaji da se poboljša čitljivost stranice na telefonima.

  • Sa stajališta programera, re2c je dobio potpuniji podsustav
    otklanjanje pogrešaka Kod za otklanjanje pogrešaka sada je onemogućen u verzijama izdanja i
    može se omogućiti korištenjem konfiguracijske opcije --enable-debug.

Ovo izdanje trajalo je dugo - gotovo cijelu godinu.
Najviše vremena, kao i uvijek, utrošeno je na razvijanje teorijskog okvira i pisanje
Članak "Učinkovito izdvajanje podudarnosti POSIX na NFA".
Algoritmi opisani u članku implementirani su u eksperimentalnu knjižnicu libre2c
(izrada biblioteke i referentnih vrijednosti onemogućena je prema zadanim postavkama i omogućena je opcijom konfiguriranja
--enable-libs). Knjižnica nije zamišljena kao konkurencija postojećoj
projekata poput RE2, već kao istraživačka platforma za razvoj novih
algoritmi (koji se zatim mogu koristiti u re2c ili u drugim projektima).
Također je pogodan sa stajališta testiranja, benchmarkova i stvaranja povezivanja s drugim jezicima.

Re2c programeri zahvaljuju svima koji su pomogli ovo izdanje,
i zajednici općenito za ideje, izvješća o greškama, zakrpe, moral itd. ;]

Izvor: linux.org.ru

Dodajte komentar