re2c 1.2

Am Freitag, den 2. August, wurde re2c veröffentlicht, ein kostenloser Generator lexikalischer Analysatoren für die Sprachen C und C++. Zur Erinnerung: re2c wurde 1993 von Peter Bamboulis als experimenteller Generator für sehr schnelle lexikalische Analysatoren geschrieben, 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 System ermöglicht vorhandene 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 Neuerungen in Version 1.2:

  • Es wurde eine neue (vereinfachte) Möglichkeit hinzugefügt, das Ende der Eingabedaten zu überprüfen
    (englisch „EOF-Regel“).
    Hierzu wurde die Konfiguration re2c:eof hinzugefügt,
    ermöglicht Ihnen die Auswahl des Endzeichens,
    und eine spezielle $-Regel, die ausgelöst wird, wenn der Lexer
    Das Ende der Eingabedaten wurde erfolgreich erreicht.
    Historisch gesehen bietet re2c eine Auswahl verschiedener Verifizierungsmethoden für
    Ende der Eingaben, die sich in Begrenzung, Effizienz und Einfachheit unterscheiden
    Anwendungen. Die neue Methode soll das Schreiben von Code vereinfachen
    Dabei bleibt es wirksam und weithin anwendbar. Alte Wege
    funktionieren immer noch und können in manchen Fällen bevorzugt werden.

  • Es wurde die Möglichkeit hinzugefügt, externe Dateien mithilfe einer Direktive einzubinden
    /*!include:re2c "file.re" */ wobei file.re
    Dies ist der Name der Include-Datei. Re2c sucht nach Dateien im enthaltenen Dateiverzeichnis.
    sowie in der Liste der mit der Option -I angegebenen Pfade.
    Enthaltene Dateien können andere Dateien enthalten.
    Re2c stellt „Standard“-Dateien im include/-Verzeichnis bereit
    Projekt - es wird erwartet, dass sich dort nützliche Definitionen ansammeln
    reguläre Ausdrücke, so etwas wie die Standardbibliothek.
    Bisher wurde auf Wunsch der Arbeitnehmer eine Datei mit Definitionen von Unicode-Kategorien hinzugefügt.

  • Es wurde die Möglichkeit hinzugefügt, Header-Dateien mit beliebigen Header-Dateien zu generieren
    Inhalt mit den Optionen -t --type-header (oder entsprechend)
    Konfigurationen) und neue Direktiven /*!header:re2c:on*/ und
    /*!header:re2c:off*/. Dies kann in Fällen nützlich sein, in denen
    wenn re2c Definitionen von Variablen, Strukturen und Makros generieren muss,
    wird in anderen Übersetzungseinheiten verwendet.

  • Re2c versteht jetzt UTF8-Literale und Zeichenklassen in regulären Ausdrücken.
    Standardmäßig analysiert re2c Ausdrücke wie „∀x ∃y“ als.
    Folge von 1-Bit-ASCII-Zeichen e2 88 80 78 20 e2 88 83 79
    (Hex-Codes) und Benutzer müssen Unicode-Zeichen manuell maskieren:
    „u2200x u2203y“. Dies ist für viele sehr unbequem und unerwartet
    Benutzer (wie durch ständige Fehlerberichte belegt). Also jetzt
    re2c bietet eine Option --input-encoding ,
    Dadurch können Sie das Verhalten ändern und „∀x ∃y“ als analysieren
    Tel: 2200 78 20 2203 79

  • Re2c ermöglicht jetzt die Verwendung regulärer re2c-Blöcke im Modus -r --reuse.
    Dies ist praktisch, wenn die Eingabedatei viele Blöcke und nur einige davon enthält
    muss wiederverwendet werden.

  • Jetzt können Sie das Format von Warnungen und Fehlermeldungen festlegen
    mit der neuen Option --location-format . Das GNU-Format wird angezeigt
    als Dateiname:Zeile:Spalte: und das MSVC-Format als Dateiname(Zeile,Spalte).
    Diese Funktion kann für IDE-Liebhaber nützlich sein.
    Außerdem wurde eine Option --verbose hinzugefügt, die bei Erfolg eine kurze Erfolgsmeldung ausgibt.

  • Der „Kompatibilitäts“-Modus mit Flex wurde verbessert – einige Parsing-Fehler wurden behoben und
    In seltenen Fällen kommt es zu einer falschen Operatorpriorität.
    Historisch gesehen ermöglichte Ihnen die Option -F --flex-support das Schreiben von Code
    gemischt im Flex-Stil und im Re2c-Stil, was das Parsen etwas schwierig macht.
    Der Flex-Kompatibilitätsmodus wird in neuem Code selten verwendet.
    re2c unterstützt es jedoch weiterhin aus Gründen der Abwärtskompatibilität.

  • Es gilt jetzt der Zeichenklassen-Subtraktionsoperator /
    bevor die Kodierung erweitert wird, was die Verwendung in einer größeren Anzahl von Fällen ermöglicht,
    wenn eine Kodierung mit variabler Zeichenlänge verwendet wird (zum Beispiel UTF8).

  • Die Ausgabedatei wird nun atomar erstellt: re2c erstellt zunächst eine temporäre Datei
    und schreibt das Ergebnis hinein und benennt dann die temporäre Datei in die Ausgabe um
    eine Operation.

  • Die Dokumentation wurde vervollständigt und neu geschrieben; insbesondere kamen neue hinzu
    Kapitel über das Füllen des Puffers
    и über Möglichkeiten, das Ende der Eingabedaten zu überprüfen.
    Die neue Dokumentation wird im Formular gesammelt
    ein umfassendes einseitiges Handbuch
    mit Beispielen (die gleichen Quellen werden in der Manpage und in der Online-Dokumentation wiedergegeben).
    Es wurden nur unzureichende Versuche unternommen, die Lesbarkeit der Website auf Mobiltelefonen zu verbessern.

  • Aus Sicht der Entwickler hat re2c ein vollständigeres Subsystem erhalten
    Debuggen Das Debuggen von Code ist jetzt in Release-Builds und deaktiviert
    kann mit der Konfigurationsoption --enable-debug aktiviert werden.

Diese Veröffentlichung dauerte lange – fast ein ganzes Jahr.
Die meiste Zeit wurde wie immer für die Entwicklung eines theoretischen Rahmens und das Schreiben aufgewendet
Artikel „Effiziente POSIX-Submatch-Extraktion auf NFA“.
Die im Artikel beschriebenen Algorithmen sind in der experimentellen Bibliothek libre2c implementiert
(Der Aufbau der Bibliothek und der Benchmarks ist standardmäßig deaktiviert und wird durch die Konfigurationsoption aktiviert
--enable-libs). Die Bibliothek ist nicht als Konkurrenz zur bestehenden Bibliothek konzipiert
Projekte wie RE2, sondern als Forschungsplattform für die Entwicklung neuer
Algorithmen (die dann in re2c oder in anderen Projekten verwendet werden können).
Es ist auch praktisch im Hinblick auf Tests, Benchmarks und die Erstellung von Bindungen zu anderen Sprachen.

Vielen Dank von den re2c-Entwicklern an alle, die zur Entstehung dieser Veröffentlichung beigetragen haben.
und an die Community im Allgemeinen für Ideen, Fehlerberichte, Patches, Moral usw. ;]

Source: linux.org.ru

Kommentar hinzufügen