izdanje , 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 „«.
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
i .
Nova dokumentacija je prikupljena u obliku
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
