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
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
