U petak, 2. avgusta, objavljeno je izdanje re2c, besplatnog generatora leksičkih analizatora za jezike C i C++. Re2c je 1993. godine napisao Peter Bamboulis kao eksperimentalni generator vrlo brzih leksičkih analizatora, koji se razlikuje od drugih generatora po brzini generiranog koda i neobično fleksibilnom korisničkom sučelju koje omogućava da se analizatori lako i efikasno ugrade u postojeću bazu koda. 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.
Glavne inovacije u verziji 1.2:
Dodan je novi (pojednostavljeni) način za provjeru kraja ulaznih podataka
(engleski “EOF rule”).
Za ovo je dodana konfiguracija re2c:eof,
omogućava vam da odaberete terminalni karakter,
i posebno $ pravilo koje se aktivira 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
ovo je naziv uključene datoteke. Re2c traži datoteke u direktoriju uključujući datoteke,
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.
niz 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 ,
koji vam omogućava da promijenite ponašanje i analizirate "∀x ∃y" kao
2200 78 20 2203 79.
Re2c sada dozvoljava upotrebu 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 . Prikazuje se GNU format
kao ime datoteke:red:kolona:, a MSVC format kao ime datoteke(red,kolona).
Ova funkcija može biti korisna za ljubitelje IDE.
Dodata je i opcija --verbose, koja ispisuje kratku poruku pobjede ako je uspješna.
Modus "kompatibilnosti" sa flex-om 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-support 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.
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 pomoću opcije konfiguracije --enable-debug.
Ovo izdanje je trajalo dugo - skoro cijelu godinu.
Najviše vremena, kao i uvijek, utrošeno je na razvoj teorijskog okvira i pisanje
članci "Efikasno izdvajanje POSIX submatch na NFA".
Algoritmi opisani u članku implementirani su u eksperimentalnu biblioteku libre2c
(izgradnja biblioteke i benčmarka je podrazumevano onemogućena i omogućena opcijom konfigurisanja
--enable-libs). Biblioteka nije zamišljena kao konkurencija postojećoj
projekata poput RE2, ali kao istraživačku platformu za razvoj novih
algoritmi (koji se onda mogu koristiti u re2c ili u drugim projektima).
Pogodan je i sa stanovišta testiranja, benčmarka i kreiranja veza za druge jezike.
Hvala od re2c programera svima koji su pomogli da se ovo izdanje dogodi,
i zajednici općenito za ideje, izvještaje o greškama, zakrpe, moral, itd. ;]