re2c 1.2

U petak, 2. avgusta, objavljeno je izdanje re2c, besplatnog generatora leksičkih analizatora za jezike C i C++. Re2c je 1993. godine napisao Peter Bamboulis kao eksperimentalni generator vrlo brzih leksičkih analizatora, koji se razlikuje od drugih generatora po brzini generiranog koda i neobično fleksibilnom korisničkom sučelju koje omogućava da se analizatori lako i efikasno ugrade u postojeću bazu koda. Od tada, projekat je razvila zajednica i nastavlja da bude platforma za eksperimente i istraživanja u oblasti formalnih gramatika i konačnih mašina.

Glavne inovacije u verziji 1.2:

  • Dodan je novi (pojednostavljeni) način za provjeru kraja ulaznih podataka
    (engleski “EOF rule”).
    Za ovo je dodana konfiguracija re2c:eof,
    omogućava vam da odaberete terminalni karakter,
    i posebno $ pravilo koje se aktivira ako lekser
    uspješno došao do kraja ulaznih podataka.
    Istorijski gledano, re2c pruža izbor od nekoliko metoda verifikacije za
    kraj ulaza koji se razlikuju po ograničenjima, efikasnosti i jednostavnosti
    aplikacije. Nova metoda je dizajnirana da pojednostavi pisanje koda, while
    ostajući efikasni i široko primjenjivi. Stari načini
    i dalje rade i mogu biti poželjnije u nekim slučajevima.

  • Dodata mogućnost uključivanja eksternih 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 na listi putanja specificiranih pomoću opcije -I.
    Uključene datoteke mogu uključivati ​​druge datoteke.
    Re2c pruža "standardne" datoteke u include/ direktoriju
    projekat - očekuje se da će se tamo akumulirati korisne definicije
    regularni izrazi, nešto poput standardne biblioteke.
    Do sada je, na zahtjev radnika, dodat jedan fajl sa definicijama Unicode kategorija.

  • Dodata mogućnost generiranja datoteka zaglavlja sa proizvoljnim
    sadržaj koristeći opcije -t --type-header (ili odgovarajuće
    konfiguracije) i nove direktive /*!header:re2c:on*/ i
    /*!header:re2c:off*/. Ovo može biti korisno u slučajevima kada
    kada re2c treba da generiše definicije varijabli, struktura i makroa,
    koristi se u drugim prevodilačkim jedinicama.

  • Re2c sada razumije UTF8 literale i klase znakova u regularnim izrazima.
    Podrazumevano, re2c analizira izraze poput "∀x ∃y" kao.
    niz 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". Ovo je za mnoge veoma nezgodno i neočekivano
    korisnika (o čemu svjedoče stalni izvještaji o greškama). Pa sada
    re2c pruža opciju --input-encoding ,
    koji vam omogućava da promijenite ponašanje i analizirate "∀x ∃y" kao
    2200 78 20 2203 79.

  • Re2c sada dozvoljava upotrebu redovnih re2c blokova u -r --reuse modu.
    Ovo je zgodno ako ulazna datoteka sadrži mnogo blokova i samo neke od njih
    treba ponovo koristiti.

  • Sada možete postaviti format upozorenja i poruka o greškama
    koristeći novu opciju --location-format . Prikazuje se GNU format
    kao ime datoteke:red:kolona:, a MSVC format kao ime datoteke(red,kolona).
    Ova funkcija može biti korisna za ljubitelje IDE.
    Dodata je i opcija --verbose, koja ispisuje kratku poruku pobjede ako je uspješna.

  • Modus "kompatibilnosti" sa flex-om je poboljšan - neke greške pri raščlanjivanju su popravljene i
    netačan prioritet operatora u rijetkim slučajevima.
    Istorijski gledano, opcija -F --flex-support vam je omogućavala pisanje koda
    pomiješano u flex stilu i re2c stilu, što čini raščlanjivanje malo teškim.
    Način fleksibilne kompatibilnosti rijetko se koristi u novom kodu,
    ali re2c ga i dalje podržava za kompatibilnost unatrag.

  • Sada se primjenjuje operator oduzimanja klase znakova /
    prije proširenja kodiranja, što mu omogućava da se koristi u većem broju slučajeva,
    ako se koristi kodiranje promjenjive dužine znakova (na primjer UTF8).

  • Izlazna datoteka se sada kreira atomski: re2c prvo kreira privremenu datoteku
    i upisuje rezultat u njega, a zatim preimenuje privremenu datoteku u izlaz
    jedna operacija.

  • Dokumentacija je kompletirana i prepisana; posebno su dodani novi
    poglavlja o punjenju bafera
    и o načinima za provjeru kraja ulaznih podataka.
    Nova dokumentacija se prikuplja u obrascu
    sveobuhvatan priručnik na jednoj stranici
    sa primjerima (isti izvori su prikazani u man stranici i u online dokumentaciji).
    Učinjeni su loši pokušaji da se poboljša čitljivost stranice na telefonima.

  • Sa stanovišta programera, re2c je dobio potpuniji podsistem
    otklanjanje grešaka Kod za otklanjanje grešaka je sada onemogućen u verzijama izdanja i
    može se omogućiti pomoću opcije konfiguracije --enable-debug.

Ovo izdanje je trajalo dugo - skoro cijelu godinu.
Najviše vremena, kao i uvijek, utrošeno je na razvoj teorijskog okvira i pisanje
članci "Efikasno izdvajanje POSIX submatch na NFA".
Algoritmi opisani u članku implementirani su u eksperimentalnu biblioteku libre2c
(izgradnja biblioteke i benčmarka je podrazumevano onemogućena i omogućena opcijom konfigurisanja
--enable-libs). Biblioteka nije zamišljena kao konkurencija postojećoj
projekata poput RE2, ali kao istraživačku platformu za razvoj novih
algoritmi (koji se onda mogu koristiti u re2c ili u drugim projektima).
Pogodan je i sa stanovišta testiranja, benčmarka i kreiranja veza za druge jezike.

Hvala od re2c programera svima koji su pomogli da se ovo izdanje dogodi,
i zajednici općenito za ideje, izvještaje o greškama, zakrpe, moral, itd. ;]

izvor: linux.org.ru

Dodajte komentar