Penktadienį, rugpjūčio 2 d., buvo išleistas nemokamas leksinių analizatorių generatorius re2c, skirtas C ir C++ kalboms. Re2c 1993 metais parašė Peteris Bamboulis kaip eksperimentinis labai greitų leksinių analizatorių generatorius, išsiskiriantis iš kitų generatorių generuojamo kodo greičiu ir neįprastai lanksčia vartotojo sąsaja, leidžiančia lengvai ir efektyviai įterpti analizatorius į esamą kodų bazę. Nuo tada projektą plėtojo bendruomenė ir jis tebėra eksperimentų ir tyrimų platforma formaliosios gramatikos ir baigtinių būsenų mašinų srityje.
Pagrindinės 1.2 versijos naujovės:
Pridėtas naujas (supaprastintas) būdas patikrinti įvesties duomenų pabaigą
(angliškai „EOF rule“).
Tam buvo pridėta re2c:eof konfigūracija,
leidžia pasirinkti terminalo simbolį,
ir speciali $ taisyklė, kuri įsijungia, jei lekseris
sėkmingai pasiekė įvesties duomenų pabaigą.
Istoriškai re2c suteikia galimybę pasirinkti kelis būdus, kaip patikrinti
įvesties pabaiga skiriasi ribotumu, efektyvumu ir paprastumu
programos. Naujasis metodas skirtas supaprastinti kodo rašymą
išlikdami veiksmingi ir plačiai taikomi. Seni būdai
vis dar veikia ir kai kuriais atvejais gali būti teikiama pirmenybė.
Pridėta galimybė įtraukti išorinius failus naudojant direktyvą
/*!include:re2c "failas.re" */ kur failas.re
tai įtraukimo failo pavadinimas. Re2c ieško failų, įskaitant failų katalogą,
taip pat kelių, nurodytų naudojant parinktį -I, sąraše.
Įtraukti failai gali apimti kitus failus.
„Re2c“ pateikia „standartinius“ failus kataloge include/
projektas – tikimasi, kad jame susikaups naudingų apibrėžimų
reguliarios išraiškos, kažkas panašaus į standartinę biblioteką.
Kol kas darbuotojų pageidavimu buvo pridėtas vienas failas su Unicode kategorijų apibrėžimais.
Pridėta galimybė generuoti antraštės failus su savavališkai
turinį naudojant -t --type-header parinktis (arba atitinkamą
konfigūracijos) ir naujos direktyvos /*!header:re2c:on*/ ir
/*!header:re2c:off*/. Tai gali būti naudinga tais atvejais, kai
kai re2c reikia generuoti kintamųjų, struktūrų ir makrokomandų apibrėžimus,
naudojami kituose vertimo skyriuose.
Re2c dabar supranta UTF8 literatūrą ir simbolių klases įprastose išraiškose.
Pagal numatytuosius nustatymus re2c analizuoja tokias išraiškas kaip „∀x ∃y“ kaip.
1 bitų ASCII simbolių seka e2 88 80 78 20 e2 88 83 79
(šešioliktainiai kodai), o vartotojai turi pašalinti Unicode simbolius rankiniu būdu:
„u2200x u2203y“. Tai daugeliui labai nepatogu ir netikėta
vartotojų (tai liudija nuolatiniai klaidų pranešimai). Taigi dabar
re2c suteikia --input-encoding parinktį ,
kuri leidžia keisti elgesį ir analizuoti „∀x ∃y“ kaip
2200 78 20 2203 79.
Re2c dabar leidžia naudoti įprastus re2c blokus -r --reuse režimu.
Tai patogu, jei įvesties faile yra daug blokų ir tik kai kurie iš jų
reikia pakartotinai panaudoti.
Dabar galite nustatyti įspėjimų ir klaidų pranešimų formatą
naudojant naują parinktį --location-format . Rodomas GNU formatas
kaip failo pavadinimas: eilutė: stulpelis: ir MSVC formatą kaip failo pavadinimas (eilutė, stulpelis).
Ši funkcija gali būti naudinga IDE mėgėjams.
Taip pat buvo pridėta parinktis --verbose, kuri sėkmingai atspausdina trumpą pergalės pranešimą.
„Suderinamumo“ režimas su „flex“ buvo patobulintas – ištaisytos kai kurios analizavimo klaidos ir
retais atvejais neteisinga operatoriaus pirmenybė.
Istoriškai parinktis -F --flex-support leido rašyti kodą
sumaišytas flex stiliumi ir re2c stiliumi, todėl analizuoti šiek tiek sunku.
„Flex“ suderinamumo režimas retai naudojamas naujame kode,
bet re2c ir toliau palaiko jį atgaliniam suderinamumui.
Dabar taikomas simbolių klasės atimties operatorius /
prieš išplečiant kodavimą, kuris leidžia jį naudoti daugybe atvejų,
jei naudojama kintamo simbolio ilgio koduotė (pavyzdžiui, UTF8).
Išvesties failas dabar sukuriamas atomiškai: re2c pirmiausia sukuria laikiną failą
ir įrašo į jį rezultatą, o tada pervadina laikinąjį failą į išvestį
viena operacija.
Kūrėjų požiūriu, re2c įsigijo išsamesnę posistemę
derinimas Derinimo kodas dabar išjungtas leidimo versijose ir
galima įjungti naudojant konfigūravimo parinktį --enable-debug.
Šis leidimas užtruko ilgai – beveik visus metus.
Didžioji dalis laiko, kaip visada, buvo skirta teorinės sistemos kūrimui ir rašymui
Straipsnis „Efektyvus POSIX submatch ištraukimas NFA“.
Straipsnyje aprašyti algoritmai yra įgyvendinti eksperimentinėje bibliotekoje libre2c
(bibliotekos ir etalonų kūrimas pagal numatytuosius nustatymus yra išjungtas ir įgalinamas konfigūravimo parinktimi
--enable-libs). Biblioteka nesuvokiama kaip konkurentė esamai
tokiems projektams kaip RE2, bet kaip mokslinių tyrimų platforma kuriant naujus
algoritmai (kurie vėliau gali būti naudojami re2c ar kituose projektuose).
Tai taip pat patogu testavimo, etalonų ir susiejimo su kitomis kalbomis kūrimo požiūriu.
Re2c kūrėjų ačiū visiems, padėjusiems išleisti šį leidimą,
ir apskritai bendruomenei dėl idėjų, klaidų pranešimų, pataisų, moralės ir kt. ;]