održan pustiti re2c, besplatni generator leksičkog analizatora za C i C++ jezike. Podsjetimo, re2c je 1993. godine napisao Peter Bambulis kao eksperimentalni generator vrlo brzih leksičkih analizatora, koji se od ostalih generatora razlikuje po brzini generiranog koda i neobično fleksibilnom korisničkom sučelju koje omogućava da se analizatori lako i efikasno integriraju u postojeći kod. baza. 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.
Priprema za izdavanje trajala je skoro cijelu godinu. Najviše vremena, kao i uvijek, utrošeno je na razvoj teorijskog okvira i pisanje
članci "Efikasna ekstrakcija POSIX submatch na NFA".
Algoritmi opisani u članku implementirani su u eksperimentalnu biblioteku libre2c
(izgradnja biblioteke i testovi performansi su podrazumevano onemogućeni i omogućeni opcijom konfigurisanja “—enable-libs”). Biblioteka nije zamišljena kao konkurent postojećim projektima kao što je RE2, već kao istraživačka platforma za razvoj novih
algoritmi (koji se onda mogu koristiti u re2c ili u drugim projektima). Pogodan je i sa stanovišta testiranja, mjerenja performansi i kreiranja veza za druge jezike.
Glavne inovacije u verziji re2c 1.2:
Dodana je nova pojednostavljena metoda za provjeru kraja ulaznih podataka (“EOF pravilo”). Za ovo je dodana konfiguracija “re2c:eof”,
omogućava vam da odaberete terminalni karakter,
i posebno pravilo “$”, koje se pokreće 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" ime datoteke koja se uključuje. Re2c traži datoteke u uključujući direktorij datoteka,
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
sekvenca 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 {ascii | utf8}",
što vam omogućava da promijenite ponašanje i analizirate “∀x ∃y” kao
“2200 78 20 2203 79.”
Re2c sada dozvoljava korištenje 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 {gnu | msvc}". Prikazuje se GNU format
kao "filename:line:column:", a MSVC format kao "filename(line,column)".
Ova funkcija može biti korisna za ljubitelje IDE.
Dodata je i opcija "--verbose", koja prikazuje kratku poruku pobjede ako je uspješna.
Način “kompatibilnosti” sa flexom 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-suppor" 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 korištenjem opcije konfiguracije "--enable-debug".