U petak, 2. kolovoza, objavljeno je izdanje re2c, besplatnog generatora leksičkih analizatora za jezike C i C++. Podsjetimo, re2c je 1993. godine napisao Peter Bamboulis kao eksperimentalni generator vrlo brzih leksičkih analizatora, koji se od drugih generatora razlikuje po brzini generiranog koda i neobično fleksibilnom korisničkom sučelju koje omogućuje jednostavno i učinkovito ugrađivanje analizatora u postojeću bazu kodova. Od tada je projekt razvijala zajednica i nastavlja biti platforma za eksperimente i istraživanja u području formalnih gramatika i konačnih automata.
Glavne inovacije u verziji 1.2:
Dodan je novi (pojednostavljeni) način provjere kraja ulaznih podataka
(englesko “EOF pravilo”).
Za to je dodana konfiguracija re2c:eof,
omogućuje odabir znaka terminala,
i posebno $ pravilo koje se aktivira ako lexer
uspješno došao do kraja ulaznih podataka.
Povijesno gledano, re2c nudi izbor nekoliko metoda verifikacije za
kraj inputa koji se razlikuju po ograničenjima, učinkovitosti i jednostavnosti
aplikacije. Nova metoda dizajnirana je za pojednostavljenje pisanja koda, dok
ostajući učinkoviti i široko primjenjivi. Stari načini
i dalje radi i može biti poželjan u nekim slučajevima.
Dodana je mogućnost uključivanja vanjskih 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 u popisu staza navedenih pomoću opcije -I.
Uključene datoteke mogu uključivati druge datoteke.
Re2c pruža "standardne" datoteke u direktoriju include/
projekt - očekuje se da će se tu akumulirati korisne definicije
regularni izrazi, nešto poput standardne knjižnice.
Do sada je na zahtjev radnika dodana jedna datoteka s definicijama Unicode kategorija.
Dodana mogućnost generiranja datoteka zaglavlja s proizvoljnim
sadržaj koristeći opcije -t --type-header (ili odgovarajuće
konfiguracije) i nove direktive /*!header:re2c:on*/ i
/*!zaglavlje:re2c:isključeno*/. Ovo može biti korisno u slučajevima kada
kada re2c treba generirati definicije varijabli, struktura i makronaredbi,
koristi se u drugim prijevodnim jedinicama.
Re2c sada razumije UTF8 literale i klase znakova u regularnim izrazima.
Prema zadanim postavkama, re2c analizira izraze poput "∀x ∃y" kao.
slijed 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". To je za mnoge vrlo nezgodno i neočekivano
korisnika (kao što svjedoče stalna izvješća o greškama). Pa sada
re2c pruža opciju --input-encoding ,
što vam omogućuje da promijenite ponašanje i raščlanite "∀x ∃y" kao
2200 78 20 2203 79.
Re2c sada dopušta korištenje uobičajenih re2c blokova u načinu -r --reuse.
Ovo je zgodno ako ulazna datoteka sadrži mnogo blokova i samo neke od njih
treba ponovno upotrijebiti.
Sada možete postaviti format upozorenja i poruka o pogrešci
pomoću nove opcije --location-format . Prikazuje se GNU format
kao filename:line:column:, a MSVC format kao filename(line,column).
Ova značajka može biti korisna za ljubitelje IDE.
Također je dodana opcija --verbose, koja ispisuje kratku pobjedničku poruku ako je uspješna.
Način rada "kompatibilnosti" s flexom je poboljšan - neke pogreške parsiranja su ispravljene i
netočan prioritet operatora u rijetkim slučajevima.
Povijesno gledano, opcija -F --flex-support omogućavala vam je pisanje koda
pomiješan u stilu flex i re2c stilu, što malo otežava raščlanjivanje.
Način rada Flex kompatibilnosti rijetko se koristi u novom kodu,
ali re2c ga nastavlja podržavati radi kompatibilnosti unazad.
Sada se primjenjuje operator oduzimanja klase znakova /
prije proširenja kodiranja, što omogućuje korištenje u većem broju slučajeva,
ako se koristi kodiranje promjenjive duljine znakova (na primjer UTF8).
Izlazna datoteka sada se stvara atomski: re2c prvo stvara privremenu datoteku
i zapisuje rezultat u nju, a zatim preimenuje privremenu datoteku u izlaz
jedna operacija.
Sa stajališta programera, re2c je dobio potpuniji podsustav
otklanjanje pogrešaka Kod za otklanjanje pogrešaka sada je onemogućen u verzijama izdanja i
može se omogućiti korištenjem konfiguracijske opcije --enable-debug.
Ovo izdanje trajalo je dugo - gotovo cijelu godinu.
Najviše vremena, kao i uvijek, utrošeno je na razvijanje teorijskog okvira i pisanje
Članak "Učinkovito izdvajanje podudarnosti POSIX na NFA".
Algoritmi opisani u članku implementirani su u eksperimentalnu knjižnicu libre2c
(izrada biblioteke i referentnih vrijednosti onemogućena je prema zadanim postavkama i omogućena je opcijom konfiguriranja
--enable-libs). Knjižnica nije zamišljena kao konkurencija postojećoj
projekata poput RE2, već kao istraživačka platforma za razvoj novih
algoritmi (koji se zatim mogu koristiti u re2c ili u drugim projektima).
Također je pogodan sa stajališta testiranja, benchmarkova i stvaranja povezivanja s drugim jezicima.
Re2c programeri zahvaljuju svima koji su pomogli ovo izdanje,
i zajednici općenito za ideje, izvješća o greškama, zakrpe, moral itd. ;]