Izdanje re2c lexer generatora 1.2

održan pustiti re2c, besplatni generator leksičkog analizatora za C i C++ jezike. Podsjetimo, re2c je 1993. godine napisao Peter Bambulis kao eksperimentalni generator vrlo brzih leksičkih analizatora, koji se od ostalih generatora razlikuje po brzini generiranog koda i neobično fleksibilnom korisničkom sučelju koje omogućava da se analizatori lako i efikasno integriraju u postojeći kod. baza. 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.

Priprema za izdavanje trajala je skoro cijelu godinu. Najviše vremena, kao i uvijek, utrošeno je na razvoj teorijskog okvira i pisanje
članci "Efikasna ekstrakcija POSIX submatch na NFA".
Algoritmi opisani u članku implementirani su u eksperimentalnu biblioteku libre2c
(izgradnja biblioteke i testovi performansi su podrazumevano onemogućeni i omogućeni opcijom konfigurisanja “—enable-libs”). Biblioteka nije zamišljena kao konkurent postojećim projektima kao što je RE2, već kao istraživačka platforma za razvoj novih
algoritmi (koji se onda mogu koristiti u re2c ili u drugim projektima). Pogodan je i sa stanovišta testiranja, mjerenja performansi i kreiranja veza za druge jezike.

Glavne inovacije u verziji re2c 1.2:

  • Dodana je nova pojednostavljena metoda za provjeru kraja ulaznih podataka (“EOF pravilo”). Za ovo je dodana konfiguracija “re2c:eof”,
    omogućava vam da odaberete terminalni karakter,
    i posebno pravilo “$”, koje se pokreće 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" ime datoteke koja se uključuje. Re2c traži datoteke u uključujući direktorij datoteka,
    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
    sekvenca 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 {ascii | utf8}",
    što vam omogućava da promijenite ponašanje i analizirate “∀x ∃y” kao
    “2200 78 20 2203 79.”

  • Re2c sada dozvoljava korištenje 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 {gnu | msvc}". Prikazuje se GNU format
    kao "filename:line:column:", a MSVC format kao "filename(line,column)".
    Ova funkcija može biti korisna za ljubitelje IDE.
    Dodata je i opcija "--verbose", koja prikazuje kratku poruku pobjede ako je uspješna.

  • Način “kompatibilnosti” sa flexom 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-suppor" 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 http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и o načinima za provjeru kraja ulaznih podataka.
    Nova dokumentacija se prikuplja u obrascu
    sveobuhvatan vodič 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 korištenjem opcije konfiguracije "--enable-debug".

izvor: opennet.ru

Dodajte komentar