Am Freitag, den 2. August, wurde die Version re2c – eines freien Generators für lexikalische Analysatoren für die Programmiersprachen C und C++ – veröffentlicht. Erinnern wir uns daran, dass re2c 1993 von Peter Bambulis als ein experimenteller Generator sehr schneller lexikalischer Analysatoren entwickelt wurde, der sich durch die Geschwindigkeit des generierten Codes und eine ungewöhnlich flexible Benutzeroberfläche auszeichnet, die es ermöglicht, Analysatoren problemlos und effizient in bestehende Codebasen zu integrieren. Seitdem entwickelt sich das Projekt durch die Gemeinschaft weiter und bleibt ein Ort für Experimente und Forschungen im Bereich formaler Grammatiken und endlicher Automaten.
Die wichtigsten Neuerungen in Version 1.2:
Eine neue (vereinfachte) Methode zur Überprüfung auf das Ende der Eingabedaten wurde hinzugefügt
(engl. „EOF rule“).
Dafür wurde die Konfiguration re2c:eof hinzugefügt,
hinzugefügt,
und eine spezielle Regel $, die aktiviert wird, wenn der Lexer
und eine spezielle Regel „$“, die greift, wenn der Lexer
erfolgreich das Ende der Eingabedaten erreicht hat.
Historisch gesehen bietet re2c mehrere Möglichkeiten zur Überprüfung auf
das Ende der Eingabedaten an, die in ihrer Einschränkung, Effizienz und Einfachheit variieren.
Der neue Weg soll das Schreiben von Code vereinfachen und bleibt dabei
effizient und weit verbreitet. Die alten Methodenfunktionieren nach wie vor und können in bestimmten Fällen bevorzugt werden.
/*!include:re2c "file.re" */, где file.re
dies der Name der eingebundenen Datei ist. Re2c sucht nach Dateien im Verzeichnis der eingebundenen Datei,
sowie in der Liste der Pfade, die mit der Option -I angegeben wurden.
Eingeschlossene Dateien können andere Dateien enthalten.
Re2c stellt „Standard“ Dateien im Verzeichnis include/ bereit,
des Projekts — es wird angenommen, dass dort nützliche Definitionen gesammelt werden.
von regulären Ausdrücken, etwas im Geiste einer Standardbibliothek.
Bisher wurde auf Wunsch der Benutzer eine Datei mit Unicode-Kategoriendefinitionen hinzugefügt.Die Möglichkeit, Header-Dateien mit beliebigem
mit Inhalt über die Optionen -t —type-header (oder die entsprechenden
Konfigurationen) und neuen Direktiven /*!header:re2c:on*/ und
/*!header:re2c:off*/. Это может быть полезно в случаях,
in denen re2c Definitionen von Variablen, Strukturen und Makros generieren soll,
die in anderen Übersetzungseinheiten verwendet werden.Re2c versteht jetzt UTF8-Literale und Zeichendefinitionen in regulären Ausdrücken.
Standardmäßig analysiert re2c Ausdrücke wie "∀x ∃y" als.
eine Sequenz von 1-Bit ASCII-Zeichen e2 88 80 78 20 e2 88 83 79
(Hex-Codes), und Benutzer müssen Unicode-Zeichen manuell escapen:
"u2200x u2203y". Dies ist für viele sehr unpraktisch und unerwartet.
was durch zahlreiche Fehlermeldungen belegt wird. Daher bietet re2c jetzt die Option „—input-encoding {ascii | utf8}“ an,
Re2c bietet die Option —input-encoding <ascii | utf8>,
die es ermöglicht, das Verhalten zu ändern und "∀x ∃y" als
2200 78 20 2203 79.Re2c erlaubt jetzt die Verwendung von regulären re2c-Blöcken im Modus -r —reuse.
wiederverwendet werden muss.
Es gibt jetzt die Möglichkeit, das Format von Warnungen und Fehlermeldungenmit der neuen Option „—location-format {gnu | msvc}“ festzulegen. Das GNU-Format wird angezeigt
mit einer neuen Option —location-format <gnu | msvc>. Das GNU-Format wird angezeigt
als filename:line:column:, und das MSVC-Format — als filename(line,column).
Außerdem wurde die Option „—verbose“ hinzugefügt, die eine kurze Erfolgsmeldung im Falle eines Erfolgs ausgibt.
Es wurde auch die Option —verbose hinzugefügt, die bei Erfolg eine kurze Erfolgsmeldung ausgibt.Der "Kompatibilitätsmodus" mit flex wurde verbessert – einige Analysefehler wurden behoben und
Historisch gesehen ermöglicht die Option „-F —flex-support“, Code
Historisch gesehen ermöglicht die Option -F —flex-support das Schreiben von Code
Der Kompatibilitätsmodus mit flex wird in neuem Code selten verwendet,
aber re2c unterstützt ihn weiterhin zur Rückwärtskompatibilität.
Der Operator zum Subtrahieren von Zeichenklassen „/“ wird jetzt angewendet.Der Operator zum Subtrahieren von Zeichenklassen / wird jetzt angewendet
vor der Entwicklung der Codierung, die es ermöglicht, sie in einer größeren Anzahl von Fällen anzuwenden,
wenn eine Zeichenkodierung mit variabler Zeichennlänge verwendet wird (z. B. UTF8).Die Ausgabedatei wird jetzt atomar erstellt: re2c erstellt zunächst eine temporäre Datei
und schreibt das Ergebnis darin, bevor sie die temporäre Datei in die Ausgabedatei umbenennt
in einem Schritt.Die Dokumentation wurde ergänzt und neu geschrieben; insbesondere wurden neue
und über die Methoden zur Überprüfung des Endes der Eingabedaten.
Die neue Dokumentation wurde in Form von
ausführlicher einseitiger Handbuch.
mit Beispielen (die gleichen Quellcodes werden in der Man-Seite und in der Online-Dokumentation gerendert).
Es wurden schwache Versuche unternommen, die Lesbarkeit der Website auf Mobiltelefonen zu verbessern.Aus Sicht der Entwickler hat re2c ein vollständigeres Debugging-System erhalten.
Der Debugging-Code ist jetzt in den Release-Builds deaktiviert und
kann über die Konfigurationsoption —enable-debug aktiviert werden.
Diese Veröffentlichung hat viel Zeit in Anspruch genommen – fast ein ganzes Jahr.
Die meiste Zeit wurde, wie immer, für die Entwicklung der theoretischen Grundlagen und das Schreiben von
des Artikels „Efficient POSIX Submatch Extraction on NFA“ benötigt..
Die im Artikel beschriebenen Algorithmen sind in der experimentellen Bibliothek libre2c implementiert
(Die Bibliothek und die Benchmarks sind standardmäßig ausgeschaltet und können mit der configure-Option —enable-libs aktiviert werden). Die Bibliothek ist nicht als Konkurrenz zu bestehenden
Projekten wie RE2 gedacht, sondern als Forschungsplattform für die Entwicklung neuer
Algorithmen (die später in re2c oder anderen Projekten verwendet werden können).
Das ist auch praktisch für Tests, Benchmarks und die Erstellung von Bindings für andere Sprachen.
Ein Dank von den Entwicklern von re2c an alle, die zur Realisierung dieses Releases beigetragen haben,
sowie an die Gemeinschaft für Ideen, Fehlerberichte, Patches, den Kampfgeist usw. ;]
werf — unser Tool für CI/CD in Kubernetes (Überblick und Video der Präsentation)
Quelle: linux.org.ru
