Veröffentlichung des re2c-Lexer-Generators 2.0

fand statt freigeben re2c 2.0, ein kostenloser lexikalischer Analysegenerator für die Sprachen C und C++. Das re2c-Projekt wurde ursprünglich 1993 von Peter Bamboulis als experimenteller Generator für sehr schnelle lexikalische Analysatoren ins Leben gerufen, der sich von anderen Generatoren durch die Geschwindigkeit des generierten Codes und eine ungewöhnlich flexible Benutzeroberfläche unterscheidet, die eine einfache und effiziente Einbettung von Analysatoren in ein bestehendes System ermöglicht Codebasis. Seitdem wurde das Projekt von der Community weiterentwickelt und ist weiterhin eine Plattform für Experimente und Forschung im Bereich formaler Grammatiken und endlicher Zustandsmaschinen.

Wichtigste Änderungen:

  • Unterstützung für die Go-Sprache hinzugefügt (aktiviert entweder durch die Option „--lang go“ für re2c oder als separates re2go-Programm). Die Dokumentation für C und Go basiert auf demselben Text, jedoch mit unterschiedlichen Codebeispielen. Das Codegenerierungs-Subsystem in re2c wurde komplett neu gestaltet, was die Unterstützung neuer Sprachen in Zukunft erleichtern soll.
  • Ein alternatives Build-System für CMake hinzugefügt (danke). ligfx!). Versuche, re2c in CMake zu übersetzen, wurden schon lange unternommen, aber bis ligfx schlug niemand eine vollwertige Lösung vor. Das alte Autotools-Build-System wird weiterhin unterstützt und verwendet, und es gibt keine Pläne, es in absehbarer Zukunft aufzugeben (teils, um Probleme für Distributionsentwickler zu vermeiden, teils, weil das alte Build-System stabiler und übersichtlicher ist als das neue). ). Beide Systeme werden kontinuierlich mit Travis CI getestet.
  • Es wurde die Möglichkeit hinzugefügt, Schnittstellencode in Konfigurationen anzugeben, wenn die generische API verwendet wird. Bisher mussten die meisten APIs in Form von Funktionen oder Funktionsmakros angegeben werden. Jetzt können sie in Form beliebiger Zeichenfolgen mit benannten Vorlagenparametern der Form „@@{Name}“ oder einfach „@@“ (sofern nur ein Parameter vorhanden ist und keine Mehrdeutigkeit besteht) angegeben werden. Der API-Stil wird durch die Konfiguration re2c:api:style festgelegt (der Wert „functions“ gibt den funktionalen Stil an, und „free-form“ gibt einen beliebigen Stil an).
  • Die Funktionsweise der Option „-c“, „—start-conditions“ wurde verbessert, sodass Sie mehrere miteinander verbundene Lexer in einem re2c-Block kombinieren können. Jetzt können Sie reguläre Blöcke zusammen mit bedingten Blöcken verwenden und mehrere unabhängige bedingte Blöcke in einer Datei definieren. Verbesserte Funktionsweise der Option „-r“, „--reuse“ (Wiederverwendung von Code aus einem Block in anderen Blöcken) in Kombination mit den Optionen „-c“, „--start-conditions“ und „-f“, „-- „storable-state“-Optionen (ein zustandsbehafteter Lexer, der jederzeit unterbrochen werden kann und die Ausführung später fortsetzt).
  • Es wurde ein Fehler im kürzlich hinzugefügten End-of-Input-Algorithmus (EOF-Regel) behoben, der in seltenen Fällen zu einer falschen Verarbeitung überlappender Regeln führte.
  • Der Bootstrap-Prozess wurde vereinfacht. Zuvor versuchte das Build-System, dynamisch ein bereits erstelltes re2c zu finden, das zum Neuaufbau verwendet werden konnte. Dies führte zu falschen Abhängigkeiten (da das Abhängigkeitsdiagramm dynamisch war, was den meisten Build-Systemen nicht gefällt). Um nun Lexer neu zu erstellen, müssen Sie das Build-System explizit konfigurieren und die Variable RE2C_FOR_BUILD festlegen.

Source: opennet.ru

Kommentar hinzufügen