re2c 1.2

Op vrijdag 2 augustus is de release van re2c verschenen — een vrije generator van lexicale analysers voor de talen C en C++. Ter herinnering, re2c werd in 1993 geschreven door Peter Bambulis als een experimentele generator van zeer snelle lexicale analysers, die zich onderscheidt van andere generators door de snelheid van de gegenereerde code en een ongewoon flexibele gebruikersinterface, die het gemakkelijk en effectief maakt om analysers in een bestaande codebasis te integreren. Sindsdien ontwikkelt de gemeenschap het project verder en blijft het een platform voor experimenten en onderzoek op het gebied van formele grammatica's en eindige automaten.

Belangrijkste vernieuwingen in versie 1.2:

  • Een nieuwe (vereenvoudigde) methode voor het controleren op het einde van de invoer is toegevoegd.
    (Eng. 'EOF rule').
    Hiervoor is de configuratie re2c:eof toegevoegd,
    die het mogelijk maakt om het terminale teken te kiezen,
    en een speciale regel $ die wordt geactiveerd als de lexer
    met succes het einde van de invoergegevens heeft bereikt.
    Historisch gezien biedt re2c verschillende manieren om te controleren op
    het einde van de invoergegevens, variërend in beperkingen, efficiëntie en eenvoud
    van toepassing. De nieuwe manier is bedoeld om het schrijven van code te vereenvoudigen, terwijl het
    efficiënt en breed toepasbaar blijft. De oude manieren
    werken nog steeds en kunnen in sommige gevallen de voorkeur genieten.

  • Er is een mogelijkheid toegevoegd om externe bestanden in te voegen met behulp van de directive
    /*!include:re2c "file.re" */, где file.re
    de naam van het inbegrepen bestand is. Re2c zoekt naar bestanden in de directory van het inbegrepen bestand,
    maar ook in de lijst met paden die zijn opgegeven met de optie -I.
    Ingevoegde bestanden kunnen andere bestanden insluiten.
    Re2c biedt 'standaard' bestanden in de directory include/
    van het project — het wordt verwacht dat daar nuttige definities worden verzameld
    van reguliere expressies, iets in de geest van een standaard bibliotheek.
    Tot nu toe is er op verzoek van gebruikers een bestand toegevoegd met definities voor Unicode-categorieën.

  • Er is nu een mogelijkheid toegevoegd om headerbestanden met willekeurige
    met inhoud via de opties -t —type-header (of overeenkomstige
    configuraties) en nieuwe direttieven /*!header:re2c:on*/ en
    /*!header:re2c:off*/. Это может быть полезно в случаях,
    re2c definities van variabelen, structuren en macro's moet genereren,
    die in andere vertaal eenheden worden gebruikt.

  • Re2c begrijpt nu UTF8-literals en tekenklassen in reguliere expressies.
    Standaard parseert re2c expressies zoals "∀x ∃y" als.
    een reeks van 1-bits ASCII-symbolen e2 88 80 78 20 e2 88 83 79
    (hex-codes), en gebruikers moeten Unicode-tekens handmatig ontsnappen:
    "u2200x u2203y". Dit is erg ongemakkelijk en onverwacht voor velen.
    gebruikers (zoals blijkt uit constante bugrapports). Daarom
    re2c biedt de optie —input-encoding ,
    die het mogelijk maakt om het gedrag te wijzigen en "∀x ∃y" te parseren als
    2200 78 20 2203 79.

  • Re2c staat nu het gebruik van gewone re2c-blokken toe in de modus -r —reuse.
    Dit is handig als het invoerbestand veel blokken bevat, en slechts een deel ervan
    hergebruikt hoeft te worden.

  • Er is een mogelijkheid toegevoegd om het formaat van waarschuwingen en foutmeldingen
    met de nieuwe optie —location-format . Het GNU-formaat wordt weergegeven
    als filename:line:column:, en het MSVC-formaat — als filename(line,column).
    Deze functie kan handig zijn voor IDE-fans.
    Er is ook een optie —verbose toegevoegd, die een kort succesvol bericht weergeeft in geval van succes.

  • De 'compatibiliteitsmodus' met flex is verbeterd — enkele parsefouten zijn verholpen en
    onjuiste prioriteiten van operatoren zijn in zeldzame gevallen gecorrigeerd.
    Historisch gezien stelt de optie -F —flex-support in staat om code te schrijven.
    in mengvorm in flex-stijl en re2c-stijl te schrijven, wat de syntactische parsing enigszins bemoeilijkt.
    De compatibiliteitsmodus met flex wordt zelden gebruikt in nieuwe code,
    maar re2c blijft het ondersteunen voor achterwaartse compatibiliteit.

  • De operator voor het aftrekken van letterlijke klassen / wordt nu toegepast.
    voor het uitpakken van de codering, wat het mogelijk maakt om het in een groter aantal gevallen toe te passen,
    indien een codering met variabele tekenlengte wordt gebruikt (bijvoorbeeld UTF8).

  • Het uitvoerbestand wordt nu atomair aangemaakt: re2c maakt eerst een tijdelijk bestand aan
    en schrijft de resultaten daarin, waarna het tijdelijke bestand wordt hernoemd naar de uitvoer
    in één bewerking.

  • De documentatie is aangevuld en herschreven; in het bijzonder zijn nieuwe
    hoofdstukken over bufferopvulling
    en over methoden om het einde van de invoergegevens te controleren.
    De nieuwe documentatie is verzameld in de vorm van
    uitgebreide eendaagse handleiding
    met voorbeelden (dezelfde bronbestanden worden weergegeven in manpage en in de online documentatie).
    Er zijn zwakke pogingen gedaan om de leesbaarheid van de site op telefoons te verbeteren.

  • Vanuit het perspectief van ontwikkelaars heeft re2c een meer volledige debug-subsysteem gekregen.
    De debugcode is nu uitgeschakeld in de release-builds en
    kan worden ingeschakeld met de configure-optie —enable-debug.

Deze release heeft lang geduurd — bijna een jaar.
De meeste tijd, zoals altijd, ging naar het ontwikkelen van de theoretische basis en het schrijven van
artikel "Efficient POSIX Submatch Extraction on NFA".
De algoritmes die in het artikel worden beschreven, zijn geïmplementeerd in de experimentele bibliotheek libre2c
(de bibliotheek en benchmarks zijn standaard uitgeschakeld en kunnen worden ingeschakeld met de configure-optie
—enable-libs). De bibliotheek is niet bedoeld als concurrent voor bestaande
projecten zoals RE2, maar als een onderzoeksplatform voor de ontwikkeling van nieuwe
algoritmen (die vervolgens kunnen worden gebruikt in re2c of andere projecten).
Het is ook handig voor testen, benchmarks en het maken van bindings naar andere talen.

Dank namens de ontwikkelaars van re2c aan iedereen die bij deze release heeft geholpen,
en aan de gemeenschap in het algemeen voor ideeën, bugrapporten, patches, strijdlust, enz.;]

Bron: linux.org.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster