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.
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. ;]