Release , ein freier Generator von Lexikanalysatoren fĂŒr die Programmiersprachen C und C++. Erinnern wir uns daran, dass re2c 1993 von Peter Bambulys als experimenteller Generator fĂŒr sehr schnelle Lexikanalysatoren geschrieben wurde, der sich durch die Geschwindigkeit des generierten Codes und eine ungewöhnlich flexible BenutzeroberflĂ€che auszeichnet, die das einfache und effiziente Einbinden von Analysatoren in bestehende Codebasen ermöglicht. Seitdem wird das Projekt von der Community weiterentwickelt und bleibt eine Plattform fĂŒr Experimente und Forschung auf dem Gebiet der formalen Grammatiken und endlichen Automaten.
Die Vorbereitung des Releases hat fast ein ganzes Jahr gedauert. Wie immer ging ein GroĂteil der Zeit fĂŒr die Entwicklung der theoretischen Basis und das Schreiben
des Artikels â«.
Die im Artikel beschriebenen Algorithmen sind in der experimentellen Bibliothek libre2c implementiert
(der Bau der Bibliothek und der Leistungstests ist standardmĂ€Ăig deaktiviert und kann mit der configure-Option ââenable-libsâ aktiviert werden). Die Bibliothek ist nicht als Konkurrenz zu bestehenden Projekten wie RE2 gedacht, sondern als Forschungsplattform zur Entwicklung neuer
Algorithmen (die spĂ€ter in re2c oder anderen Projekten verwendet werden können). AuĂerdem ist dies aus Sicht der Tests, der Leistungsbemessung und der Erstellung von Bindings fĂŒr andere Sprachen nĂŒtzlich.
Die wichtigsten Neuerungen in der Version re2c 1.2:
- Es wurde ein neuer vereinfachter Weg zur ĂberprĂŒfung des Endes der Eingabedaten (âEOF-Regelâ) hinzugefĂŒgt. DafĂŒr wurde die Konfiguration âre2c:eofâ
hinzugefĂŒgt,
die es ermöglicht, ein Endsymbol auszuwÀhlen,
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 Methoden - funktionieren nach wie vor und können in bestimmten FÀllen bevorzugt werden.
Es wurde die Möglichkeit hinzugefĂŒgt, externe Dateien mittels der Direktive
â/*!include:re2c âfile.reâ */â, wobei âfile.reâ der Name der einzuschlieĂenden Datei ist. Re2c sucht Dateien im Verzeichnis der einbindenden Datei,
Eingeschlossene Dateien können andere Dateien enthalten.
Re2c stellt âStandardâ-Dateien im Verzeichnis âinclude/â zur VerfĂŒgung.
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
Inhalt mithilfe der Optionen â-t âtype-headerâ (oder entsprechender
Konfigurationen) und neuer Direktiven â/*!header:re2c:on*/â und
â/*!header:re2c:off*/â zu generieren, wurde hinzugefĂŒgt. Dies kann in FĂ€llen nĂŒtzlich sein,
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 Benutzer sehr umstĂ€ndlich und unerwartet,
was durch zahlreiche Fehlermeldungen belegt wird. Daher bietet re2c jetzt die Option ââinput-encoding {ascii | utf8}â an,
um das Verhalten zu Ă€ndern und ââx âyâ als
â2200 78 20 2203 79â zu parsen.
Re2c ermöglicht jetzt die Verwendung klassischer re2c-Blöcke im Modus â-r âreuseâ. - Das ist praktisch, wenn die Eingabedatei viele Blöcke enthĂ€lt und nur ein Teil davon
wiederverwendet werden muss.
Es gibt jetzt die Möglichkeit, das Format von Warnungen und Fehlermeldungen - mit der neuen Option ââlocation-format {gnu | msvc}â festzulegen. Das GNU-Format wird angezeigt
als âfilename:line:column:â, das MSVC-Format als âfilename(line,column)â.
Diese Funktion kann fĂŒr IDE-Enthusiasten nĂŒtzlich sein.
AuĂerdem wurde die Option ââverboseâ hinzugefĂŒgt, die eine kurze Erfolgsmeldung im Falle eines Erfolgs ausgibt.
Der KompatibilitÀtsmodus mit flex wurde verbessert - einige Parsing-Fehler wurden behoben und - die falsche PrioritÀt von Operatoren in seltenen FÀllen korrigiert.
Historisch gesehen ermöglicht die Option â-F âflex-supportâ, Code
mischweise im flex- und re2c-Stil zu schreiben, was die syntaktische Analyse etwas erschwert.
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 Subtraktionsoperator fĂŒr 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
Kapitel ĂŒber
und .
Die neue Dokumentation wurde in Form von
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 mit der Konfigurationsoption "âenable-debug" aktiviert werden.
Quelle: opennet.ru
