Release , eines freien Generators fĂŒr lexikalische Analysatoren in den Programmiersprachen C und C++. Es sei daran erinnert, dass re2c 1993 von Peter Bambulys als experimenteller Generator fĂŒr extrem schnelle lexikalische Analysatoren entwickelt wurde. Dieser hebt sich durch die Schnelligkeit des generierten Codes und eine auĂergewöhnlich flexible BenutzeroberflĂ€che hervor, die eine einfache und effiziente Integration von Analysatoren in bestehende Codebasen ermöglicht. Seitdem wird das Projekt von der Gemeinschaft weiterentwickelt und bleibt eine Plattform fĂŒr Experimente und Forschungen im Bereich formale Grammatiken und endliche Automaten.
Die Vorbereitung des Releases hat fast ein ganzes Jahr in Anspruch genommen. Wie immer ging die meiste Zeit in die Entwicklung der theoretischen Grundlagen und das Schreiben
des Artikels â«.
Die in dem Artikel beschriebenen Algorithmen sind in der experimentellen Bibliothek libre2c implementiert
(der Aufbau der Bibliothek und der Leistungstests ist standardmĂ€Ăig deaktiviert und kann durch die configure-Option ââenable-libsâ aktiviert werden). Die Bibliothek ist nicht als Konkurrenz zu bestehenden Projekten wie RE2 gedacht, sondern vielmehr als Forschungsplattform fĂŒr die Entwicklung neuer
Algorithmen, die spĂ€ter in re2c oder in anderen Projekten verwendet werden können. Dies ist auch praktisch fĂŒr Tests, Leistungsmetriken und die Erstellung von Bindings zu anderen Sprachen.
Die wichtigsten Neuerungen in Version re2c 1.2:
- Eine neue vereinfachte Möglichkeit zur ĂberprĂŒfung des Endes der Eingabedaten (âEOF-Regelâ) wurde hinzugefĂŒgt. HierfĂŒr wurde die Konfiguration âre2c:eofâ hinzugefĂŒgt,
die es ermöglicht, ein Terminalsymbol auszuwÀhlen,
und eine spezielle Regel â$â, die greift, wenn der Lexer
erfolgreich das Ende der Eingabedaten erreicht.
Historisch gesehen bietet re2c mehrere Möglichkeiten zur ĂberprĂŒfung auf
das Ende der Eingabedaten, die sich in Begrenztheit, Effizienz und Einfachheit unterscheiden.
Anwendungen. Eine neue Methode soll das Schreiben von Code vereinfachen und dabei
effizient und weit verbreitet bleiben. Die alten Methoden
funktionieren weiterhin und können in bestimmten FĂ€llen bevorzugt werden. - Die Möglichkeit, externe Dateien ĂŒber eine Direktive einzufĂŒgen, wurde hinzugefĂŒgt.
â/*!include:re2c âfile.reâ */â, wobei âfile.reâ der Name der einzufĂŒgenden Datei ist. Re2c sucht nach Dateien im Verzeichnis der einbindenden Datei,
sowie in der Liste von Pfaden, die mit der Option â-Iâ angegeben sind.
EingefĂŒgte Dateien können andere Dateien einschlieĂen.
Re2c stellt âStandardâ-Dateien im Verzeichnis âinclude/â bereit
von dem erwartet wird, dass dort nĂŒtzliche Definitionen fĂŒr
regulĂ€re AusdrĂŒcke gesammelt werden, Ă€hnlich wie in einer Standardbibliothek.
Auf Wunsch der Nutzer wurde vorerst eine Datei mit Definitionen fĂŒr Unicode-Kategorien hinzugefĂŒgt. - Es wurde die Möglichkeit hinzugefĂŒgt, Header-Dateien mit beliebigem
mit dem Inhalt durch die Optionen â-t âtype-headerâ (oder entsprechenden
Konfigurationen) und neuen Direktiven â/*!header:re2c:on*/â und
â/*!header:re2c:off*/â. Dies kann in FĂ€llen nĂŒtzlich sein,
wann re2c Definitionen fĂŒr Variablen, Strukturen und Makros generieren muss,
die in anderen Ăbersetzungseinheiten verwendet werden. - Re2c versteht jetzt UTF8-Literale und Zeichensetzungen in regulĂ€ren AusdrĂŒcken.
StandardmĂ€Ăig parsed re2c AusdrĂŒcke wie ââx âyâ als
eine Folge 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
was durch stĂ€ndige Bug-Reports belegt wird. Daher bietet re2c jetzt die Option âinput-encoding ,
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â zu parsen. - Re2c ermöglicht jetzt die Verwendung von normalen re2c-Blöcken im Modus â-r âreuseâ.
wiederverwendet werden mĂŒssen.
Es besteht die Möglichkeit, das Format von Warnungen und Fehlermeldungen - mit der neuen Option âlocation-format festzulegen. Das GNU-Format wird angezeigt
mit der neuen Option ââlocation-format {gnu | msvc}â. Das GNU-Format wird angezeigt
als âdateiname:zeile:spalte:â, wĂ€hrend das MSVC-Format als âdateiname(zeile,spalte)â angezeigt wird.
Es wurde auch die Option âverbose hinzugefĂŒgt, die eine kurze Erfolgsnachricht ausgibt.
ZusĂ€tzlich wurde die Option ââverboseâ hinzugefĂŒgt, die eine kurze Erfolgsmeldung im Falle eines Erfolgs ausgibt. - Der KompatibilitĂ€tsmodus mit flex wurde ĂŒberarbeitet â einige Parsing-Fehler wurden behoben und
die PrioritÀt der Operatoren in seltenen FÀllen korrigiert.
Historisch gesehen ermöglicht die Option â-F âflex-supporâ das Schreiben von Code
im Mix aus Flex- und re2c-Stil, 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 fĂŒr die Subtraktion von ZeichensĂ€tzen â/â wird jetzt angewendet
vor der Entfaltung der Kodierung, was seine Verwendung in mehr FÀllen ermöglicht,
insbesondere wenn eine Kodierung mit variabler Zeichendauer (zum Beispiel UTF8) verwendet wird. - Die Ausgabedatei wird jetzt atomar erstellt: re2c erstellt zunÀchst eine temporÀre Datei
und schreibt das Ergebnis hinein, bevor die temporÀre Datei in eine Ausgabedatei umbenannt
wird, und zwar in einem einzigen Schritt. - Die Dokumentation wurde ergĂ€nzt und ĂŒberarbeitet; insbesondere wurden neue
Kapitel ĂŒber
und .
Die neue Dokumentation ist zusammengefasst in
mit Beispielen (die gleichen Quellcodes werden sowohl in der man-Seite als auch in der Online-Dokumentation dargestellt).
Es wurden nur schwache Versuche unternommen, die Lesbarkeit der Website auf Handys zu verbessern. - Aus Sicht der Entwickler hat re2c ein umfassenderes Debugging-System erhalten.
Der Debug-Code ist jetzt in den Release-Builds deaktiviert und
kann durch die configure-Option ââenable-debugâ aktiviert werden.
Quelle: opennet.ru
