Objavljen je generator leksičkih analizatora re2c 1.2

Održano izdanje re2c, slobodnog generatora leksičkih analizatora za jezike C i C++. Podsjetimo, re2c je napisao Peter Bambulis 1993. godine kao eksperimentalni generator vrlo brzih leksičkih analizatora, koji se razlikovao od ostalih generatora brzinom generiranog koda i neobično fleksibilnim korisničkim sučeljem, koje omogućuje lako i učinkovito integriranje analizatora u postojeću kodeks bazu. Od tada projekt razvija zajednica i i dalje ostaje platforma za eksperimentiranje i istraživanje u području formalnih gramatika i konačnih automata.

Priprema izdanja trajala je gotovo cijelu godinu. Većinu vremena, kao i uvijek, odnijela je izrada teorijske osnove i pisanje
članka „Efficient POSIX Submatch Extraction on NFA«.
Algoritmi opisani u članku implementirani su u eksperimentalnoj biblioteci libre2c
(izgradnja biblioteke i testova performansi isključena je prema defaultu i uključuje se konfiguracijskom 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 u drugim projektima). Također je praktično s gledišta testiranja, mjerenja performansi i izrade bindinga za druge jezike.

Glavne novosti u verziji re2c 1.2:

  • Dodana je nova pojednostavljena metoda provjere kraja ulaznih podataka („EOF rule“). Za to je dodana konfiguracija „re2c:eof“,
    koja omogućuje odabir terminalnog simbola,
    i posebno pravilo „$“, koje se aktivira ako leksik
    uspješno dosegne kraj ulaznih podataka.
    Povijesno, re2c nudi nekoliko načina provjere na
    kraj ulaznih podataka, koji variraju po ograničenosti, učinkovitosti i jednostavnosti
    primjene. Nova metoda je osmišljena da pojednostavi pisanje koda, uz to
    ostaje učinkovita i široko primjenjiva. Stari načini
    i dalje rade i mogu biti poželjniji u određenim slučajevima.
  • Dodana je mogućnost uključivanja vanjskih datoteka putem direktive
    „/*!include:re2c „file.re“ */“, gdje je „file.re“ naziv uključene datoteke. Re2c pretražuje datoteke u direktoriju uključene datoteke,
    kao i na popisu putanja definiranih opcijom „-I“.
    Uključene datoteke mogu uključivati druge datoteke.
    Re2c pruža "standardne" datoteke u direktoriju "include/"
    projekta — pretpostavlja se da će se tamo akumulirati korisne definicije
    regularnih izraza, nešto u duhu standardne biblioteke.
    Za sada je na zahtjev korisnika dodana jedna datoteka s definicijama Unicode kategorija.
  • Dodana je mogućnost generiranja zaglavlja s proizvoljnim
    sadržajem pomoću opcija "-t —type-header" (ili odgovarajućih
    konfiguracija) i novih direktiva "/*!header:re2c:on*/" i
    "/*!header:re2c:off*/". Ovo može biti korisno u slučajevima kada
    re2c treba generirati definicije varijabli, struktura i makronaredbi
    koje se koriste u drugim jedinicama prevođenja.
  • Re2c sada razumije UTF8-literalne i klase znakova u regularnim izrazima.
    Po defaultu, re2c parsa izraze poput "∀x ∃y" kao
    niz 1-bitnih ASCII znakova "e2 88 80 78 20 e2 88 83 79"
    (hex kodovi), i korisnici moraju ručno escaping Unicode znakove:
    "\\u2200x \\u2203y". Ovo je veoma nezgodno i neočekivano za mnoge
    korisnike (o čemu svjedoče stalni bug reportovi). Stoga, sada
    re2c pruža opciju "—input-encoding {ascii | utf8}",
    koja omogućuje promjenu ponašanja i parsiranje "∀x ∃y" kao
    "2200 78 20 2203 79".
  • Re2c sada omogućava korištenje običnih re2c-blokova u režimu "-r —reuse".
    Ovo je korisno ako ulazna datoteka sadrži mnogo blokova, a samo dio od njih
    treba koristiti ponovno.
  • Pojavila se mogućnost definiranja formata upozorenja i poruka o greškama
    pomoću nove opcije "—location-format {gnu | msvc}". GNU-format se prikazuje
    kao "filename:line:column:", a MSVC-format — kao "filename(line,column)".
    Ova mogućnost može koristiti ljubiteljima IDE-a.
    Također je dodana opcija "—verbose" koja ispisuje kratak uspješan narativ u slučaju uspjeha.
  • Unaprijeđena je "kompatibilnost" s flex-om — ispravljene su neke greške parsiranja i
    neispravni prioriteti operatora u rijetkim slučajevima.
    Istorijski gledano, opcija "-F —flex-support" omogućuje pisanje koda
    u kombinaciji sa stilom flex i stilom re2c, što malo otežava sintaktičko prepoznavanje.
    Režim kompatibilnosti s flexom rijetko se koristi u novom kodu,
    ali re2c i dalje podržava to za povratnu kompatibilnost.
  • Operator oduzimanja klasa znakova "\/" sada se primjenjuje
    do implementacije kodiranja koje omogućuje njegovu primjenu u većem broju slučajeva,
    ako se koristi kodiranje s varijabilnom dužinom simbola (npr. UTF8).
  • Izlazna datoteka sada se stvara atomarno: re2c prvo kreira privremenu datoteku
    i zapisuje u nju rezultat, a zatim preimenuje privremenu datoteku u izlaznu
    jednom operacijom.
  • Dokumentacija je dopisana i preradila; posebno su dodana nova
    poglavlja o http://re2c.org/manual/manual.html#buffer-refilling punjenju bafera
    i o načinima provjere kraja ulaznih podataka.
    Nova dokumentacija je prikupljena u obliku
    opsežnog jednostraničnog vodiča
    s primjerima (isti izvori se prikazuju u manpageu i u online dokumentaciji).
    Bile su poduzete slabe pokušaje poboljšanja čitljivosti stranice na telefonima.
  • S gledišta programera, re2c je dobio potpuniji sustav
    debugiranja. Debugging kod je sada isključen u produkcijskim gradnjama i
    može se uključiti pomoću configure opcije „—enable-debug”.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster