Am Montag, dem 20. Juli, wurde die Veröffentlichung von re2c – dem Generator für schnelle lexikalische Analysatoren – bekannt gegeben.
Wesentliche Änderungen:
Unterstützung für die Programmiersprache Go hinzugefügt.
(entweder über die Option —lang go für re2c oder als separates Programm re2go aktivierbar).
Die Dokumentation für C und Go wird aus demselben Text generiert, bietet jedoch unterschiedliche
Codebeispiele. Das Codesystem in re2c wurde vollständig überarbeitet, was
die Unterstützung neuer Sprachen in Zukunft erleichtern sollte.-
Versuche, re2c auf CMake zu portieren, gab es schon lange, aber bis ligfx hat niemand
eine umfassende Lösung vorgeschlagen.
Das alte Build-System auf Autotools wird weiterhin unterstützt und verwendet,
und in absehbarer Zukunft gibt es keine Pläne, es aufzugeben (teilweise um keine
Probleme für die Entwickler von Distributionen zu schaffen, teilweise weil das alte Build-System
stabiler und klarer ist als das neue).
Beide Systeme werden kontinuierlich mithilfe von Travis CI getestet. Die Möglichkeit, Interface-Code in Konfigurationen unter Verwendung des
generischen API (generic API) zu definieren, wurde hinzugefügt. Zuvor musste die Mehrheit der APIs in Form von
Funktionen oder funktionale Makros. Jetzt können sie in Form von beliebigen
Strings mit benannten Platzhaltern wie @@{name} oder einfach @@ angegeben werden (wenn
es nur einen Parameter gibt und keine Mehrdeutigkeit entsteht). Der API-Stil wird durch die
Konfiguration re2c:api:style festgelegt (der Wert functions legt den funktionalen Stil fest, während free-form einen beliebigen Stil definiert).Die Funktion der Option -c, —start-conditions, wurde verbessert, die es ermöglicht, mehrere
miteinander verbundene Lexer in einem re2c-Block zu kombinieren. Jetzt können
reguläre Blöcke gleichwertig mit bedingten verwendet werden, und es können mehrere nicht verbundene bedingte
Blöcke in einer Datei festgelegt werden.
Die Funktion der Option -r, —reuse (Wiederverwendung von Code aus einem Block
in anderen Blöcken) wurde in Kombination mit den Optionen -c, —start-conditions und -f, —storable-state verbessert
(Lexer mit speichertem Zustand, der an einer beliebigen Stelle unterbrochen
und später fortgesetzt werden kann).Ein Fehler im kürzlich hinzugefügten Algorithmus zur Verarbeitung des Endes der Eingabedaten
(EOF-Regel), der in seltenen Fällen zu falscher Verarbeitung führte, wurde behoben.
Die Verarbeitung von überlappenden Regeln wurde verbessert.Der Bootstrapping-Prozess wurde vereinfacht. Früher versuchte das Build-System dynamisch, bereits
ein zusammengebautes re2c, das zur Selbstrekonstruktion verwendet werden kann.
Dies führte zu falschen Abhängigkeiten (da der Abhängigkeitsgraph
dynamisch war, was die meisten Buildsysteme nicht mögen).
Um die Lexer jetzt neu zu bauen, muss das Buildsystem ausdrücklich
konfiguriert werden, und die Variable RE2C_FOR_BUILD gesetzt werden.
Danke an alle, die an der Vorbereitung dieser Veröffentlichung beteiligt waren!
Quelle: linux.org.ru
