re2c 1.2

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
    kapitler blitt lagt til om buffermetoder
    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

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster