Veröffentlichung des re2c-Lexer-Generators 1.2

fand statt freigeben re2c, ein kostenloser lexikalischer Analysegenerator für die Sprachen C und C++. Denken Sie daran, dass re2c 1993 von Peter Bambulis als experimenteller Generator für sehr schnelle lexikalische Analysatoren geschrieben wurde und sich von anderen Generatoren durch die Geschwindigkeit des generierten Codes und eine ungewöhnlich flexible Benutzeroberfläche unterscheidet, die eine einfache und effiziente Integration von Analysatoren in einen vorhandenen Code ermöglicht Base. 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.

Die Vorbereitungen für die Veröffentlichung dauerten 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 Leistungstests sind standardmäßig deaktiviert und werden durch die Konfigurationsoption „—enable-libs“ aktiviert.) Die Bibliothek ist nicht als Konkurrenz zu bestehenden Projekten wie RE2 gedacht, sondern als Forschungsplattform für die Entwicklung neuer Projekte
Algorithmen (die dann in re2c oder in anderen Projekten verwendet werden können). Es ist auch praktisch im Hinblick auf Tests, Leistungsmessungen und die Erstellung von Bindungen zu anderen Sprachen.

Wichtigste Neuerungen in Version re2c 1.2:

  • Eine neue vereinfachte Methode zur Überprüfung des Endes von Eingabedaten („EOF-Regel“) hinzugefügt. Hierzu wurde die Konfiguration „re2c:eof“ hinzugefügt,
    ermöglicht Ihnen die Auswahl des Endzeichens,
    und eine Sonderregel „$“, 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“ der Name der einzubindenden Datei ist. 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 Verzeichnis „include/“ 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 die Option „--input-encoding {ascii | utf8}",
    Dadurch können Sie das Verhalten ändern und „∀x ∃y“ als analysieren
    „2200 78 20 2203 79.“

  • Re2c ermöglicht jetzt die Verwendung regulärer re2c-Blöcke im „-r --reuse“-Modus.
    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 {gnu | msvc}". 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 Siegmeldung anzeigt.

  • 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 die Option „-F --flex-suppor“ 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 http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и über Möglichkeiten, das Ende der Eingabedaten zu überprüfen.
    Die neue Dokumentation wird im Formular gesammelt
    ein umfassender einseitiger Leitfaden
    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.

Source: opennet.ru

Kommentar hinzufügen