re2c 1.2

Fredag ​​den 2. august blev udgivelsen af ​​re2c, en gratis generator af leksikale analysatorer til C og C++ sprogene, frigivet. Re2c blev skrevet i 1993 af Peter Bamboulis som en eksperimentel generator af meget hurtige leksikalske analysatorer, der adskiller sig fra andre generatorer ved hastigheden af ​​den genererede kode og en usædvanlig fleksibel brugergrænseflade, der gør det muligt for analysatorer nemt og effektivt at blive integreret i en eksisterende kodebase. Siden da er projektet blevet udviklet af samfundet og fortsætter med at være en platform for eksperimenter og forskning inden for formelle grammatikker og finite state-maskiner.

Vigtigste nyskabelser i version 1.2:

  • Tilføjet en ny (forenklet) måde at tjekke for slutningen af ​​inputdataene
    (engelsk "EOF-regel").
    Til dette er re2c:eof-konfigurationen tilføjet,
    giver dig mulighed for at vælge terminaltegnet,
    og en særlig $-regel, der udløses, hvis lexeren
    nåede slutningen af ​​inputdataene.
    Historisk set giver re2c et valg mellem flere verifikationsmetoder til
    slutningen af ​​input, der varierer i begrænsning, effektivitet og enkelhed
    applikationer. Den nye metode er designet til at forenkle skrivning af kode, mens
    samtidig med at den forbliver effektiv og bredt anvendelig. Gamle måder
    fungerer stadig og kan i nogle tilfælde foretrækkes.

  • Tilføjet muligheden for at inkludere eksterne filer ved hjælp af et direktiv
    /*!include:re2c "file.re" */ hvor file.re
    dette er navnet på include-filen. Re2c leder efter filer i den inklusive filmappe,
    samt i listen over stier, der er angivet ved hjælp af -I-indstillingen.
    Inkluderede filer kan omfatte andre filer.
    Re2c leverer "standard" filer i mappen include/
    projekt - det forventes, at der vil ophobes nyttige definitioner
    regulære udtryk, noget som standardbiblioteket.
    Indtil videre er der på anmodning af arbejdere tilføjet en fil med definitioner af Unicode-kategorier.

  • Tilføjet muligheden for at generere header-filer med vilkårlig
    indhold ved hjælp af -t --type-header-indstillingerne (eller passende
    konfigurationer) og nye direktiver /*!header:re2c:on*/ og
    /*!header:re2c:off*/. Dette kan være nyttigt i tilfælde hvor
    når re2c skal generere definitioner af variabler, strukturer og makroer,
    bruges i andre oversættelsesenheder.

  • Re2c forstår nu UTF8 bogstaver og karakterklasser i regulære udtryk.
    Som standard analyserer re2c udtryk som "∀x ∃y" som.
    sekvens af 1-bit ASCII-tegn e2 88 80 78 20 e2 88 83 79
    (hex-koder), og brugere skal undslippe Unicode-tegn manuelt:
    "u2200x u2203y". Dette er meget ubelejligt og uventet for mange
    brugere (som det fremgår af konstante fejlrapporter). Så nu
    re2c giver en --input-encoding mulighed ,
    som giver dig 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 --genbrugstilstand.
    Dette er praktisk, hvis inputfilen indeholder mange blokke og kun nogle af dem
    skal genbruges.

  • Nu kan du indstille formatet for advarsler og fejlmeddelelser
    ved at bruge den nye --location-format mulighed . GNU-formatet vises
    som filnavn:linje:kolonne: og MSVC-formatet som filnavn(linje,kolonne).
    Denne funktion kan være nyttig for IDE-elskere.
    En --verbose mulighed er også blevet tilføjet, som udskriver en kort sejrsmeddelelse, hvis det lykkes.

  • "Kompatibilitet"-tilstanden med flex er blevet forbedret - nogle parsingsfejl er blevet rettet og
    forkert operatørprioritet i sjældne tilfælde.
    Historisk set har -F --flex-support muligheden givet dig mulighed for at skrive kode
    blandet i flex stil og re2c stil, hvilket gør parsing lidt svært.
    Flex-kompatibilitetstilstand bruges sjældent i ny kode,
    men re2c fortsætter med at understøtte det for bagudkompatibilitet.

  • Tegnklassen subtraktionsoperator / gælder nu
    før du udvider kodningen, hvilket gør det muligt at bruge det i et større antal tilfælde,
    hvis der anvendes en kodning med variabel tegnlængde (for eksempel UTF8).

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

  • Dokumentationen blev færdiggjort og omskrevet; der kom især nye til
    kapitler om at fylde bufferen
    и om måder at tjekke for slutningen af ​​inputdata.
    Den nye dokumentation er samlet i skemaet
    en omfattende XNUMX-sides manual
    med eksempler (de samme kilder er gengivet i manpagen og i onlinedokumentationen).
    Der er gjort dårlige forsøg på at forbedre læsbarheden af ​​webstedet på telefoner.

  • Fra udviklernes synspunkt har re2c fået et mere komplet delsystem
    fejlretning Fejlretningskode er nu deaktiveret i udgivelsesbuilds og
    kan aktiveres ved hjælp af indstillingsmuligheden --enable-debug.

Denne udgivelse tog lang tid - næsten et helt år.
Det meste af tiden blev som altid brugt på at udvikle en teoretisk ramme og skrive
Artikel "Effektiv POSIX Submatch Extraction på NFA".
Algoritmerne beskrevet i artiklen er implementeret i det eksperimentelle bibliotek libre2c
(opbygning af biblioteket og benchmarks er deaktiveret som standard og er aktiveret af indstillingen konfigurer
--enable-libs). Biblioteket er ikke tænkt som en konkurrent til det eksisterende
projekter som RE2, men som forskningsplatform for udvikling af nye
algoritmer (som så kan bruges i re2c eller i andre projekter).
Det er også praktisk med hensyn til test, benchmarks og oprettelse af bindinger til andre sprog.

Tak fra re2c-udviklerne til alle, der hjalp denne udgivelse med at ske,
og til fællesskabet generelt for ideer, fejlrapporter, patches, moral osv. ;]

Kilde: linux.org.ru

Tilføj en kommentar