Vrijgave van de re2c 2.0 lexicale analysatorgenerator

vond plaats релиз re2c 2.0, een gratis lexicale analysegenerator voor C- en C++-talen. Het re2c-project werd oorspronkelijk in 1993 door Peter Bamboulis opgericht 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.

Grote veranderingen:

  • Ondersteuning toegevoegd voor de Go-taal (mogelijk gemaakt door de “--lang go” optie voor re2c, of als een afzonderlijk re2go-programma). De documentatie voor C en Go wordt gegenereerd op basis van dezelfde tekst, maar met verschillende codevoorbeelden. Het codegeneratiesubsysteem in re2c is volledig opnieuw ontworpen, wat het in de toekomst gemakkelijker moet maken om nieuwe talen te ondersteunen.
  • Alternatief bouwsysteem toegevoegd aan CMake (bedankt ligfx!). Er zijn al lange tijd pogingen ondernomen om re2c naar CMake te vertalen, maar tot ligfx stelde niemand een volwaardige oplossing voor. Het oude Autotools-bouwsysteem wordt nog steeds ondersteund en gebruikt, en er zijn geen plannen om het in de nabije toekomst te verlaten (deels om te voorkomen dat er problemen ontstaan ​​voor distributie-ontwikkelaars, deels omdat het oude bouwsysteem stabieler en beknopter is dan het nieuwe ). Beide systemen worden continu getest met Travis CI.
  • De mogelijkheid toegevoegd om interfacecode in configuraties op te geven bij gebruik van de generieke API. Voorheen moesten de meeste API's worden gespecificeerd in de vorm van functies of functiemacro's. Nu kunnen ze worden gespecificeerd in de vorm van willekeurige tekenreeksen met benoemde sjabloonparameters in de vorm “@@{naam}” of eenvoudigweg “@@” (als er maar één parameter is en er geen dubbelzinnigheid is). De API-stijl wordt ingesteld door de re2c:api:style-configuratie (de functiewaarde specificeert de functionele stijl, en vrije vorm specificeert een willekeurige stijl).
  • De werking van de optie “-c”, “—start-voorwaarden” is verbeterd, waardoor u meerdere onderling verbonden lexers in één re2c-blok kunt combineren. Nu kunt u gewone blokken naast voorwaardelijke blokken gebruiken en verschillende niet-gerelateerde voorwaardelijke blokken in één bestand definiëren. Verbeterde werking van de optie "-r", "--reuse" (hergebruik van code uit het ene blok in andere blokken) in combinatie met de "-c", "--start-conditions" en "-f", "-- storable-state"-opties (een stateful lexer die op elk moment kan worden onderbroken en later kan worden voortgezet).
  • Er is een bug opgelost in het onlangs toegevoegde end-of-input (EOF-regel)-algoritme, dat in zeldzame gevallen resulteerde in een onjuiste verwerking van overlappende regels.
  • Het bootstrap-proces is vereenvoudigd. Voorheen probeerde het bouwsysteem dynamisch een reeds gebouwde re2c te vinden die kon worden gebruikt om zichzelf opnieuw op te bouwen. Dit leidde tot onjuiste afhankelijkheden (omdat de afhankelijkheidsgrafiek dynamisch was, wat de meeste bouwsystemen niet prettig vinden). Om lexers opnieuw op te bouwen, moet je nu expliciet het buildsysteem configureren en de RE2C_FOR_BUILD variabele instellen.

Bron: opennet.ru

Voeg een reactie