re2c 1.2

U petak, 2. kolovoza, objavljen je re2c — slobodan generator leksičkih analizatora za jezike C i C++. Podsjećamo da je re2c napisao Peter Bambulys 1993. godine kao eksperimentalni generator vrlo brzih leksičkih analizatora, koji se razlikuje od drugih generatora brzinom generiranog koda i neobično fleksibilnim korisničkim sučeljem, koje omogućava lako i učinkovito umetanje analizatora u postojeću kodnu bazu. Od tada projekt se razvija s angažmanom zajednice i nastavlja biti platforma za eksperimente i istraživanja u području formalnih gramatika i konačnih automata.

Glavne novosti u verziji 1.2:

  • Dodana je nova ( pojednostavljena) metoda provjere na kraj ulaznih podataka
    (eng. „EOF rule“).
    Za ovo je dodana konfiguracija re2c:eof,
    koja omogućuje odabir terminalnog simbola,
    i posebno pravilo $, koje se aktivira ako lexer
    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" */, где file.re
    to je ime uključene datoteke. Re2c traži datoteke u direktoriju uključene datoteke,
    kao i u popisu putanja određenih putem opcije -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*/. Это может быть полезно в случаях,
    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 parsira izraze poput "∀x ∃y" kao.
    sekvencu 1-bitnih ASCII simbola e2 88 80 78 20 e2 88 83 79
    (hex kodovi), i korisnici moraju ručno escaping Unicode znakove:
    "u2200x u2203y". Ovo je vrlo nezgodno i iznenađujuće za mnoge
    korisnike (o čemu svjedoče stalni bug reportovi). Stoga, sada
    re2c pruža opciju —input-encoding ,
    koja omogućava promjenu ponašanja i razparsiravanje "∀x ∃y" kao
    2200 78 20 2203 79.

  • Re2c sada omogućava korištenje uobičajenih 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
    uz novu opciju —location-format . GNU-format prikazuje se
    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 kratku pobjedonosnu poruku u slučaju uspjeha.

  • Režim „kompatibilnosti“ s flex je unaprijeđen — ispravljene su neke pogreške parsiranja i
    neispravni prioriteti operatora u rijetkim slučajevima.
    Povijesno, opcija -F —flex-support omogućava 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 simbolskih klasa / 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
    glave o punjenju bafera
    i o načinima provjere kraja ulaznih podataka.
    Nova dokumentacija je prikupljena u obliku
    iscrpnog jednogodišnjeg priručnika
    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 biti uključen putem configure-opcije —enable-debug.

Ovo izdanje je potrajalo dugo vremena — skoro cijelu godinu.
Većina vremena, kao i uvijek, otišla je na razvoj teorijske osnove i pisanje
članaka „Efikasno vađenje podudaranja POSIX-a na NFA“.
Algoritmi opisani u članku implementirani su u eksperimentalnoj biblioteci libre2c
(izrada biblioteke i benchmarka je prema zadanim postavkama isključena i može se uključiti s configure opcijom
--enable-libs). Biblioteka nije zamišljena kao konkurencija postojećim
projektima poput RE2, već kao istraživačka platforma za razvoj novih
algoritama (koji se potom mogu koristiti u re2c ili drugim projektima).
Također je korisno s gledišta testiranja, benchmarka i izrade bindova za druge jezike.

Zahvala od developera re2c svima koji su pomogli da se ovaj izdanje ostvari,
i u cjelini zajednici za ideje, izvještaje o greškama, ispravke, borbeni duh itd. ;]

Izvor: linux.org.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