Fredag 2. august kom lanseringen av re2c – en gratis generator for leksikalske analysatorer for C- og C++-språk. Vi minner om at re2c ble skrevet i 1993 av Peter Bambulis som en eksperimentell generator for svært raske leksikalske analysatorer, kjennetegnet av hastigheten til den genererte koden og et uvanlig fleksibelt brukergrensesnitt, som gjør det lett og effektivt å integrere analysert koden i eksisterende kodebase. Siden den gang har prosjektet utviklet seg gjennom fellesskapet og fortsetter å være en plattform for eksperimentering og forskning innen formelle grammatikker og endelige automater.
De viktigste nyhetene i versjon 1.2:
En ny (forenklet) metode for sjekk av slutten av inndata er lagt til
(eng. «EOF rule»).
For dette er konfigurasjonen re2c:eof lagt til,
som lar deg velge terminaltegn,
og en spesiell regel $, som aktiveres når leksikeren
har lykkes med å nå slutten av inndata.
Historisk har re2c gitt flere metoder å velge mellom for å sjekke for
slutten av inndata, varierende i begrensning, effektivitet og enkelhet
av bruk. Den nye metoden har som mål å forenkle kodeskrivingen, samtidig som den
forblir effektiv og bredt anvendelig. Gamle metoder
fungerer fortsatt og kan være foretrukne i enkelte tilfeller.Muligheten for å inkludere eksterne filer ved hjelp av direktivet er lagt til
/*!include:re2c "file.re" */, где file.re
dette er navnet på den inkluderte filen. Re2c leter etter filer i katalogen til den inkluderende filen,
samt i listen over stier angitt med alternativet -I.
Inkluderte filer kan inkludere andre filer.
Re2c tilbyr «standard» filer i include/-katalogen
til prosjektet – det antas at der vil samles nyttige definisjoner
av regulære uttrykk, noe i retning av en standardbibliotek.
Så langt, på forespørsel fra publikum, er én fil med definisjoner av Unicode-kategorier lagt til.Muligheten for å generere header-filer med vilkårlig
innhold ved hjelp av alternativene -t —type-header (eller tilsvarende
konfigurasjoner) og nye direktiver i*!header:re2c:on*/ og
/*!header:re2c:off*/. Это может быть полезно в случаях,
når re2c må generere definisjoner av variabler, strukturer og makroer,
som brukes i andre oversettelsesmoduler.Re2c forstår nå UTF8-litteraler og tegnklasser i regulære uttrykk.
Som standard, parser re2c uttrykk som "∀x ∃y" som.
en sekvens av 1-bits ASCII-tegn e2 88 80 78 20 e2 88 83 79
(hex-koder), og brukere må håndtere Unicode-tegn manuelt:
"u2200x u2203y". Dette er svært upraktisk og uventet for mange
brukere (noe som bekreftes av konstante feilmeldinger). Derfor nå
gir re2c muligheten —input-encoding <ascii | utf8>,
som lar deg endre oppførselen og analysere "∀x ∃y" som
2200 78 20 2203 79.Re2c tillater nå bruk av vanlige re2c-blokker i -r —reuse-modus.
Dette er praktisk hvis inngangsfilen inneholder mange blokker, og bare en del av dem
trenger å bli gjenbrukt.Det har blitt mulig å spesifisere formatet for varsler og feilmeldinger
ved hjelp av det nye alternativet —location-format <gnu | msvc>. GNU-formatet vises
som filename:line:column:, mens MSVC-formatet vises som filename(line,column).
Denne funksjonen kan være nyttig for IDE-entusiaster.
Det har også blitt lagt til et alternativ —verbose, som gir en kort suksessmelding i tilfelle suksess.Kompatibilitetsmodus med flex har blitt forbedret — noen parsemessige feil har blitt rettet og
feil prioritering av operatorer i sjeldne tilfeller.
Historisk tillater alternativet -F —flex-support å skrive kode
blandet i flex-stil og re2c-stil, noe som gjør syntaktisk analyse litt vanskeligere.
Kompatibilitetsmodusen med flex brukes sjelden i ny kode,
men re2c fortsetter å støtte det for bakoverkompatibilitet.Operatoren for subtraksjon av tegnklasser / brukes nå
før utvidelse av kodingen, noe som gjør det mulig å bruke den i flere tilfeller,
hvis det brukes en koding med variabel tegnlengde (for eksempel UTF8).Utdatafilen opprettes nå atomisk: re2c lager først en midlertidig fil
og skriver resultatet til den, før den omdøper den midlertidige filen til utdatafilen
som en enkelt operasjon.Dokumentasjonen har blitt skrevet om og omskrevet; blant annet har nye
og om måter å sjekke for slutten av inngangsdataene.
Den nye dokumentasjonen er samlet i en
uttømmende en-sides håndbok
med eksempler (de samme kildene vises både i man-siden og i nett-dokumentasjonen).
Det har blitt gjort svakere forsøk på å forbedre lesbarheten på nettsteder for telefoner.Fra utviklernes perspektiv har re2c fått et mer omfattende debuggingssystem.
Debug-koden er nå deaktivert i produksjonsbygg.
kan bli aktivert med configure-valget —enable-debug.
Denne utgaven tok lang tid — nesten et helt år.
Den største delen av tiden, som alltid, gikk til utvikling av den teoretiske basen og skrivingen
artikkel «Effektiv POSIX Submatch Utdrag på NFA».
Algoritmene beskrevet i artikkelen er implementert i det eksperimentelle biblioteket libre2c
(byggebiblioteket og benchmarkene er deaktivert som standard og kan aktiveres med configure-valget
—enable-libs). Biblioteket er ikke ment som en konkurrent til eksisterende
prosjekter som RE2, men som en forskningsplattform for utvikling av nye
algoritmer (som senere kan brukes i re2c eller andre prosjekter).
Dette er også praktisk med tanke på testing, benchmarking og oppretting av bindinger til andre språk.
Takk fra utviklerne av re2c til alle som bidro til at denne utgaven kunne bli realisert,
og generelt til fellesskapet for ideer, feilrapporter, patcher, pågangsmot osv. ;]
Kilde: linux.org.ru
