Uitgave van de re2c lexicale analyzer generator 1.2

Heeft plaatsgevonden release re2c, een vrije generator voor lexicale analyse voor de programmeertalen C en C++. Ter herinnering, re2c werd in 1993 geschreven door Peter Bambilius als een experimentele generator voor zeer snelle lexicale analyzers, die zich onderscheidt van andere generators door de snelheid van de gegenereerde code en een ongewoon flexibele gebruikersinterface, die het eenvoudig en efficiënt maakt om analyzers in bestaande codebases te integreren. Sindsdien wordt het project ontwikkeld door de gemeenschap en blijft het een platform voor experimenten en onderzoek op het gebied van formele grammatica's en eindige automaten.

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

De belangrijkste vernieuwingen in versie re2c 1.2:

  • Er is een nieuwe vereenvoudigde manier toegevoegd om het einde van de invoergegevens te controleren (“EOF rule”). Hiervoor is de configuratie “re2c:eof” toegevoegd,
    die het mogelijk maakt om het terminale teken te kiezen,
    en een speciale regel “$”, die in werking treedt 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” */”, waarbij “file.re” de naam is van het in te voegen bestand. Re2c zoekt bestanden in de directory van het invoegde bestand,
    en ook in de lijst van paden die zijn opgegeven met de optie “-I”.
    Ingevoegde bestanden kunnen andere bestanden insluiten.
    Re2c levert '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
    inhoud te genereren met de opties '-t --type-header' (of de bijbehorende
    configuraties) en nieuwe richtlijnen '/*!header:re2c:on*/' en
    '/*!header:re2c:off*/'. Dit kan nuttig zijn in gevallen waarin
    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 uitdrukkingen zoals '∀x ∃y' als
    een reeks van 1-bits ASCII-tekens '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 veel
    gebruikers (zoals blijkt uit constante bugrapports). Daarom
    biedt re2c nu de optie '--input-encoding {ascii | utf8}',
    die het gedrag verandert en '∀x ∃y' kan parseren als
    '2200 78 20 2203 79'.
  • Re2c staat nu het gebruik van normale re2c-blokken toe in 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
    in te stellen met de nieuwe optie '--location-format {gnu | msvc}'. Het GNU-formaat wordt weergegeven
    als 'bestandsnaam:regel:kolom:', en het MSVC-formaat als 'bestandsnaam(regel,koloom)'.
    Deze functie kan handig zijn voor IDE-fans.
    Er is ook een optie '--verbose' toegevoegd die een kort bevestigingsbericht weergeeft bij succes.
  • De 'compatibiliteitsmodus' met flex is verbeterd — sommige parsingfouten en
    onjuiste prioriteiten van operatoren zijn in zeldzame gevallen gecorrigeerd.
    Historisch gezien staat de optie '-F --flex-support' toe om code
    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 tekenklassen '/' 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 toegevoegd over http://re2c.org/manual/manual.html#buffer-refilling bufferopvulling
    en over methoden om het einde van de invoergegevens te controleren.
    De nieuwe documentatie is verzameld in de vorm van
    een uitgebreide eendelige 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».

Bron: opennet.ru

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