re2c 1.2

Op vrijdag 2 augustus werd de release van re2c uitgebracht, een gratis generator van lexicale analysatoren voor de talen C en C++. Re2c werd in 1993 door Peter Bamboulis geschreven als een experimentele generator van zeer snelle lexicale analysatoren, die zich van andere generatoren onderscheidt door de snelheid van de gegenereerde code en een ongebruikelijk flexibele gebruikersinterface waarmee analysatoren eenvoudig en efficiënt kunnen worden ingebed in een bestaande codebasis. Sindsdien is het project ontwikkeld door de gemeenschap en blijft het een platform voor experimenten en onderzoek op het gebied van formele grammatica's en eindige toestandsmachines.

Belangrijkste innovaties in versie 1.2:

  • Een nieuwe (vereenvoudigde) manier toegevoegd om te controleren op het einde van de invoergegevens
    (Engelse “EOF-regel”).
    Hiervoor is de re2c:eof-configuratie toegevoegd,
    Hiermee kunt u het terminalteken selecteren,
    en een speciale $-regel die wordt geactiveerd als de lexer
    met succes het einde van de invoergegevens bereikt.
    Historisch gezien biedt re2c de keuze uit verschillende verificatiemethoden
    einde van inputs variërend in beperking, efficiëntie en eenvoud
    toepassingen. De nieuwe methode is ontworpen om het schrijven van code te vereenvoudigen
    terwijl het effectief en breed toepasbaar blijft. Oude manieren
    werken nog steeds en kunnen in sommige gevallen de voorkeur hebben.

  • De mogelijkheid toegevoegd om externe bestanden op te nemen met behulp van een richtlijn
    /*!include:re2c "bestand.re" */ waarbij bestand.re
    dit is de naam van het include-bestand. Re2c zoekt naar bestanden in de bijbehorende bestandsmap,
    evenals in de lijst met paden die zijn opgegeven met de optie -I.
    Inbegrepen bestanden kunnen andere bestanden bevatten.
    Re2c biedt "standaard" bestanden in de include/ directory
    project - er wordt verwacht dat zich daar bruikbare definities zullen ophopen
    reguliere expressies, zoiets als de standaardbibliotheek.
    Tot nu toe is op verzoek van werknemers één bestand met definities van Unicode-categorieën toegevoegd.

  • De mogelijkheid toegevoegd om header-bestanden te genereren met willekeurig
    inhoud met behulp van de opties -t --type-header (of de juiste
    configuraties) en nieuwe richtlijnen /*!header:re2c:on*/ en
    /*!header:re2c:off*/. Dit kan nuttig zijn in gevallen waarin
    wanneer re2c definities van variabelen, structuren en macro's moet genereren,
    gebruikt in andere vertaaleenheden.

  • Re2c begrijpt nu UTF8-letterlijke waarden en tekenklassen in reguliere expressies.
    Standaard parseert re2c uitdrukkingen als "∀x ∃y" as.
    reeks van 1-bit ASCII-tekens e2 88 80 78 20 e2 88 83 79
    (hexadecimale codes) en gebruikers moeten Unicode-tekens handmatig escapen:
    "u2200x u2203y". Dit is voor velen erg lastig en onverwacht
    gebruikers (zoals blijkt uit constante bugrapporten). Dus nu
    re2c biedt een --input-encoding-optie ,
    waarmee u het gedrag kunt wijzigen en "∀x ∃y" kunt parseren als
    2200 78 20 2203 79.

  • Re2c staat nu het gebruik van reguliere re2c-blokken toe in de modus -r --reuse.
    Dit is handig als het invoerbestand veel blokken bevat en slechts enkele ervan
    moet worden hergebruikt.

  • Nu kunt u het formaat van waarschuwingen en foutmeldingen instellen
    met behulp van de nieuwe --location-format optie . Het GNU-formaat wordt weergegeven
    als bestandsnaam:regel:kolom:, en het MSVC-formaat als bestandsnaam(regel,kolom).
    Deze functie kan handig zijn voor IDE-liefhebbers.
    Er is ook een --verbose-optie toegevoegd, die bij succes een kort overwinningsbericht afdrukt.

  • De "compatibiliteits"-modus met flex is verbeterd - enkele parseerfouten zijn opgelost en
    onjuiste operatorvoorrang in zeldzame gevallen.
    Vroeger kon je met de optie -F --flex-support code schrijven
    gemengd in flexstijl en re2c-stijl, wat het parseren een beetje moeilijk maakt.
    Flex-compatibiliteitsmodus wordt zelden gebruikt in nieuwe code,
    maar re2c blijft het ondersteunen voor achterwaartse compatibiliteit.

  • De tekenklasse-aftrekkingsoperator / is nu van toepassing
    voordat de codering wordt uitgebreid, waardoor deze in een groter aantal gevallen kan worden gebruikt,
    als er een codering met variabele tekenlengte wordt gebruikt (bijvoorbeeld UTF8).

  • Het uitvoerbestand wordt nu atomair aangemaakt: re2c maakt eerst een tijdelijk bestand aan
    en schrijft het resultaat erin, en hernoemt vervolgens het tijdelijke bestand naar de uitvoer
    één operatie.

  • De documentatie werd aangevuld en herschreven; er kwamen vooral nieuwe bij
    hoofdstukken over het vullen van de buffer
    и over manieren om te controleren op het einde van invoergegevens.
    De nieuwe documentatie wordt verzameld in het formulier
    een uitgebreide handleiding van één pagina
    met voorbeelden (dezelfde bronnen worden weergegeven op de manpagina en in de online documentatie).
    Er zijn slechte pogingen gedaan om de leesbaarheid van de site op telefoons te verbeteren.

  • Vanuit het oogpunt van de ontwikkelaars heeft re2c een completer subsysteem gekregen
    debuggen Foutopsporingscode is nu uitgeschakeld in releasebuilds en
    kan worden ingeschakeld met behulp van de configuratieoptie --enable-debug.

Deze release duurde lang - bijna een heel jaar.
Het grootste deel van de tijd werd, zoals altijd, besteed aan het ontwikkelen van een theoretisch raamwerk en aan het schrijven
Artikel "Efficiënte POSIX-submatchextractie op NFA".
De in het artikel beschreven algoritmen zijn geïmplementeerd in de experimentele bibliotheek libre2c
(het bouwen van de bibliotheek en benchmarks is standaard uitgeschakeld en wordt ingeschakeld door de configuratieoptie
--enable-libs). De bibliotheek is niet bedoeld als concurrent van de bestaande bibliotheek
projecten als RE2, maar als onderzoeksplatform voor de ontwikkeling van nieuwe
algoritmen (die vervolgens in re2c of in andere projecten kunnen worden gebruikt).
Het is ook handig vanuit het oogpunt van testen, benchmarks en het creëren van bindingen met andere talen.

Dank van de re2c-ontwikkelaars aan iedereen die deze release heeft helpen realiseren,
en aan de gemeenschap in het algemeen voor ideeën, bugrapporten, patches, moreel, enz. ;]

Bron: linux.org.ru

Voeg een reactie