re2c 1.2

Fredag den 2. august blev re2c - en gratis generator af lexikalske analyseværktøjer til C- og C++-sprog - frigivet. Som en påmindelse blev re2c skrevet i 1993 af Peter Bambulis som en eksperimentel generator for meget hurtige lexikalske analyseværktøjer, der adskilte sig fra andre generatorer ved hastigheden af den genererede kode og et usædvanligt fleksibelt brugergrænseflade, der nemt og effektivt kan integreres i eksisterende kodebaser. Siden da har projektet udviklet sig med fællesskabet og fortsætter med at være en platform for eksperimenter og forskning inden for formelle grammatikker og endelige automater.

Hovednyhederne i version 1.2:

  • En ny (forenklet) metode til at kontrollere slutningen af inddata
    (eng. "EOF rule").
    Til dette er konfigurationen re2c:eof tilføjet,
    som giver mulighed for at vælge terminalsymbolet,
    og en særlig regel $, der aktiveres, hvis leksikeren
    har nået slutningen af inputdataene.
    Historisk set tilbyder re2c flere måder at tjekke på
    slutningen af inputdataene, varierende i begrænsning, effektivitet og enkelhed
    i anvendelsen. Den nye metode er designet til at forenkle kodningen, samtidig med at den
    forbliver effektiv og bredt anvendelig. De gamle metoder
    arbejder stadig og kan være at foretrække i visse tilfælde.

  • Muligheden for at inkludere eksterne filer med direktivet
    /*!include:re2c "file.re" */, где file.re
    er navnet på den inkluderede fil. Re2c søger filer i den inkluderede fils bibliotek,
    samt i den liste af stier, der er angivet med -I indstillingen.
    Inkluderede filer kan inkludere andre filer.
    Re2c leverer "standard"-filer i include/-mappen,
    projektet — det forudses, at nyttige definitioner vil samles der
    af regulære udtryk, noget i stil med standardbiblioteket.
    Indtil videre er der efter anmodning fra brugerne tilføjet en fil med definitioner af Unicode-kategorier.

  • Muligheden for at generere header-filer med vilkårligt
    som kan tilpasses ved hjælp af -t —type-header (eller tilsvarende
    konfigurationer) og de nye direktiver /*!header:re2c:on*/ og
    /*!header:re2c:off*/. Это может быть полезно в случаях,
    hvor re2c skal generere definitioner af variabler, strukturer og makroer,
    der anvendes i andre oversættelsesenheder.

  • Re2c forstår nu UTF8-litteraler og tegnklasser i regulære udtryk.
    Som standard parser re2c udtryk som "∀x ∃y" som.
    en sekvens af 1-bit ASCII-tegn e2 88 80 78 20 e2 88 83 79
    (hex-koder), og brugerne må manuelt eskalere Unicode-tegn:
    "u2200x u2203y". Dette er meget besværligt og uventet for mange.
    brugere (hvilket fremgår af de konstant tilbagevendende bugrapporter). Derfor
    re2c tilbyder indstillingen —input-encoding ,
    som giver mulighed for at ændre adfærden og parse "∀x ∃y" som
    2200 78 20 2203 79.

  • Re2c tillader nu brugen af almindelige re2c-blokke i -r —reuse-modus.
    Dette er praktisk, hvis indgangsfilen indeholder mange blokke, og kun en del af dem
    har brug for at blive genbrugt.

  • Der er nu mulighed for at angive formatet for advarsler og fejlmeddelelser
    ved hjælp af den nye indstilling —location-format . GNU-formatet vises
    som filename:line:column:, mens MSVC-formatet vises som filename(line,column).
    Denne mulighed kan være nyttig for IDE-elskere.
    Der er også tilføjet en indstilling —verbose, der viser en kort triumferende meddelelse i tilfælde af succes.

  • Kompatibilitetsmodus med flex er blevet forbedret — nogle parserfejl er blevet rettet, og
    forkert operatorprioritering i sjældne tilfælde er rettet.
    Historisk set gør indstillingen -F —flex-support det muligt at skrive kode.
    i blandet flex- og re2c-stil, hvilket gør den syntaktiske parsing en smule vanskeligere.
    Kompatibilitetsmodus med flex bruges sjældent i ny kode,
    men re2c fortsætter med at støtte den for bagudkompatibilitet.

  • Operatoren til subtraktion af tegnklasser / anvendes nu.
    før implementeringen af kodningen, hvilket muliggør anvendelse i flere tilfælde,
    hvis der anvendes kodning med variabel længde (f.eks. UTF8).

  • Outputfilen oprettes nu atomisk: re2c opretter først en midlertidig fil
    og skriver resultatet til den, hvorefter den omdøber den midlertidige fil til outputfilen
    i én operation.

  • Dokumentationen er blevet revideret og omskrevet; specifikt er der tilføjet nye
    kapitel om bufferfyldning
    og om metoder til at kontrollere slutningen på inddata,.
    Den nye dokumentation er samlet i form af
    en udtømmende en-sides manual
    med eksempler (de samme kilder vises i manpage og online dokumentation).
    Der blev gjort svage forsøg på at forbedre læsbarheden af webstedet på telefoner.

  • Set fra udviklernes perspektiv har re2c fået et mere omfattende
    debuggersystem. Debuggerkoden er nu deaktiveret i release-versioner og
    kan tilføjes med configure-indstillingen —enable-debug.

Denne version tog lang tid - næsten et helt år.
Det meste af tiden, som altid, gik med at udvikle den teoretiske base og skrive
artikler "Efficient POSIX Submatch Extraction on NFA".
Algoritmerne beskrevet i artiklen er implementeret i et eksperimentelt bibliotek libre2c
(bygning af biblioteker og benchmarks er som standard deaktiveret og kan aktiveres med configure-optionen
--enable-libs). Biblioteket er ikke designet til at konkurrere med eksisterende
projekter som RE2, men som en forskningsplatform til udvikling af nye
algoritmer (som senere kan bruges i re2c eller andre projekter).
Dette er også praktisk set i forhold til testning, benchmarks og oprettelse af bindings til andre sprog.

Tak fra udviklerne af re2c til alle, der har hjulpet med at få denne udgivelse til at ske,
og generelt til fællesskabet for idéer, fejlrapporter, patches, kampgejst osv. ;]

Kilde: linux.org.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster