Perjantaina 2. elokuuta julkaistiin re2c, ilmainen leksikaalisten analysaattoreiden generaattori C- ja C++-kielille. Peter Bamboulis kirjoitti Re2c:n vuonna 1993 erittäin nopeiden leksikaalisten analysaattoreiden kokeelliseksi generaattoriksi, joka erottuu muista generaattoreista generoidun koodin nopeuden ja epätavallisen joustavan käyttöliittymän ansiosta, jonka avulla analysaattorit voidaan upottaa helposti ja tehokkaasti olemassa olevaan koodikantaan. Siitä lähtien yhteisö on kehittänyt hanketta, ja se on edelleen alustana kokeiluille ja tutkimukselle formaalien kielioppien ja äärellisten tilakoneiden alalla.
Tärkeimmät innovaatiot versiossa 1.2:
Lisätty uusi (yksinkertaistettu) tapa tarkistaa syöttötietojen loppuminen
(englanniksi "EOF rule").
Tätä varten on lisätty re2c:eof-kokoonpano,
voit valita päätemerkin,
ja erityinen $-sääntö, joka laukeaa, jos lexer
saavutti syöttötietojen lopun onnistuneesti.
Historiallisesti re2c tarjoaa valinnan useista vahvistusmenetelmistä
rajoitusten, tehokkuuden ja yksinkertaisuuden suhteen vaihtelevien tulojen loppu
sovellukset. Uusi menetelmä on suunniteltu yksinkertaistamaan koodin kirjoittamista
samalla kun se pysyy tehokkaana ja laajalti sovellettavissa. Vanhat tavat
toimii edelleen ja saattaa olla joissain tapauksissa parempi.
Lisätty mahdollisuus sisällyttää ulkoisia tiedostoja käskyn avulla
/*!include:re2c "tiedosto.re" */ missä tiedosto.re
tämä on sisällytettävän tiedoston nimi. Re2c etsii tiedostoja sisältäen tiedostohakemiston,
sekä -I-vaihtoehdolla määritettyjen polkujen luettelossa.
Mukana olevat tiedostot voivat sisältää muita tiedostoja.
Re2c tarjoaa "standardi" tiedostot hakemistossa include/
hanke - siellä odotetaan kertyvän hyödyllisiä määritelmiä
säännöllisiä lausekkeita, kuten tavallinen kirjasto.
Tähän mennessä työntekijöiden pyynnöstä on lisätty yksi tiedosto Unicode-luokkien määritelmillä.
Lisätty mahdollisuus luoda otsikkotiedostoja mielivaltaisilla
sisältöä käyttämällä -t --type-header-vaihtoehtoja (tai sopivaa
kokoonpanot) ja uudet direktiivit /*!header:re2c:on*/ ja
/*!header:re2c:off*/. Tästä voi olla hyötyä tapauksissa, joissa
kun re2c:n on luotava muuttujien, rakenteiden ja makrojen määritelmiä,
käytetään muissa käännösyksiköissä.
Re2c ymmärtää nyt UTF8-literaaleja ja merkkiluokkia säännöllisissä lausekkeissa.
Oletuksena re2c jäsentää lausekkeet, kuten "∀x ∃y" muodossa.
1-bittisten ASCII-merkkien sarja e2 88 80 78 20 e2 88 83 79
(heksadesimaalikoodit), ja käyttäjien on poistettava Unicode-merkit manuaalisesti:
"u2200x u2203y". Tämä on monille erittäin epämiellyttävää ja odottamatonta
käyttäjille (kuten jatkuvat virheraportit osoittavat). Joten nyt
re2c tarjoaa --input-encoding -vaihtoehdon ,
jonka avulla voit muuttaa käyttäytymistä ja jäsentää "∀x ∃y" muodossa
2200 78 20 2203 79.
Re2c sallii nyt tavallisten re2c-lohkojen käytön -r --reuse -tilassa.
Tämä on kätevää, jos syöttötiedosto sisältää useita lohkoja ja vain osan niistä
on käytettävä uudelleen.
Nyt voit määrittää varoitusten ja virheilmoitusten muodon
käyttämällä uutta --location-format -vaihtoehtoa . GNU-muoto tulee näkyviin
muodossa tiedostonimi:rivi:sarake: ja MSVC-muodossa tiedostonimi(rivi,sarake).
Tämä ominaisuus voi olla hyödyllinen IDE-ystäville.
Myös --verbose-vaihtoehto on lisätty, joka tulostaa lyhyen voittoviestin onnistuessaan.
"Yhteensopivuus"-tilaa flexin kanssa on parannettu - jotkut jäsennysvirheet on korjattu ja
väärä operaattorin etusija harvoissa tapauksissa.
Historiallisesti -F --flex-support -vaihtoehto mahdollisti koodin kirjoittamisen
sekoitettu flex-tyyliin ja re2c-tyyliin, mikä tekee jäsentämisestä hieman vaikeaa.
Flex-yhteensopivuustilaa käytetään harvoin uudessa koodissa,
mutta re2c tukee sitä edelleen taaksepäin yhteensopivuuden takaamiseksi.
Merkkiluokan vähennysoperaattori / on nyt voimassa
ennen koodauksen laajentamista, mikä mahdollistaa sen käytön useammissa tapauksissa,
jos käytetään muuttuvan merkin pituista koodausta (esimerkiksi UTF8).
Tulostiedosto luodaan nyt atomisesti: re2c luo ensin väliaikaisen tiedoston
ja kirjoittaa tuloksen siihen ja nimeää sitten väliaikaisen tiedoston uudelleen tulosteeksi
yksi operaatio.
Kehittäjien näkökulmasta re2c on hankkinut täydellisemmän alijärjestelmän
virheenkorjaus Vianetsintäkoodi on nyt poistettu käytöstä julkaisuversioissa ja
voidaan ottaa käyttöön käyttämällä konfigurointivaihtoehtoa --enable-debug.
Tämä julkaisu kesti kauan - melkein koko vuoden.
Suurin osa ajasta, kuten aina, meni teoreettisen viitekehyksen kehittämiseen ja kirjoittamiseen
Artikkeli "Tehokas POSIX Submatch Extraction on NFA".
Artikkelissa kuvatut algoritmit on toteutettu kokeellisessa kirjastossa libre2c
(kirjaston ja vertailuarvojen luominen on oletusarvoisesti pois käytöstä ja se otetaan käyttöön configure-vaihtoehdolla
--enable-libs). Kirjastoa ei ole suunniteltu kilpailijaksi olemassa oleville
RE2:n kaltaisiin hankkeisiin, vaan tutkimusalustana uusien kehittämiseen
algoritmeja (jotka voidaan sitten käyttää re2c:ssä tai muissa projekteissa).
Se on kätevä myös testauksen, benchmarkin ja muiden kielten sidosten luomisen kannalta.
Kiitos re2c-kehittäjiltä kaikille, jotka auttoivat tämän julkaisun toteutumisessa,
ja yhteisölle yleensä ideoita, vikailmoituksia, korjauksia, moraalia jne. ;]