-
TRRE: transduktive reguläre Ausdrücke
-
Zusammenfassung
- Eine Erweiterung regulärer Ausdrücke für Textbearbeitung und
grep-ähnliche Kommandozeilen-Tools.
- Es ist ein Prototyp und sollte nicht in produktiven Umgebungen verwendet werden.
-
Einführung
- Reguläre Ausdrücke sind nützliche Werkzeuge, um Muster in Texten zu suchen.
- Für die Textbearbeitung wirken sie nicht ganz natürlich, daher wird eine Erweiterung vorgeschlagen.
- Sie werden transduktive reguläre Ausdrücke oder
trre genannt.
- Mit dem Symbol
: werden Transformationen definiert.
a:b ist die einfachste Form und ersetzt a durch b.
- Zur Demonstration des Konzepts wurde ein Kommandozeilen-Tool namens
trre erstellt.
-
Beispiele
-
Grundlagen
cat in dog ändern:
$ echo 'cat' | trre 'c:da:ot:g'
dog
- Wie bei
sed alle Treffer einer Zeichenkette ersetzen:
$ echo 'Mary had a little lamb.' | trre '(lamb):(cat)'
Mary had a little cat.
- Löschen:
$ echo 'xor' | trre '(x:)or'
or
- Einfügen:
$ echo 'or' | trre '(:x)or'
xor
-
Reguläre Ausdrücke durch Transformation
-
Bereichstransformation
-
Generator
-
Sprachspezifikation
trre ist als Paar aus Pattern-Matching:Pattern-Generation definiert.
Pattern-Matching kann ein String oder ein regulärer Ausdruck sein.
Pattern-Generation ist normalerweise ein String, kann aber auch regex sein.
-
Warum es funktioniert
trre konstruiert einen speziellen Automaten namens endlicher Zustandswandler (FST).
- Ein FST verarbeitet Eingabe-Ausgabe-Paare.
-
Designentscheidungen und offene Fragen
- Es sind mehrere Entscheidungen nötig, etwa zur Assoziativität und Priorität von
: sowie zu implizitem Epsilon.
-
Modi und Gierigkeit
trre unterstützt zwei Modi:
- Scan-Modus (Standard): Transformationen werden sequenziell angewendet.
- Match-Modus: Der gesamte String wird gegen den Ausdruck geprüft.
-
Determinisierung
- Der Prozess, einen nichtdeterministischen Automaten in einen deterministischen umzuwandeln, ist wichtig.
-
Leistung
- Die NFT-Version (nichtdeterministisch) ist etwas langsamer als
sed.
- Bei komplexen Aufgaben kann
trre_dft (die deterministische Version) besser als sed abschneiden.
-
TODO
- Vervollständigung des ERE-Funktionsumfangs, vollständige Unicode-Unterstützung, effiziente Bereichsverarbeitung usw.
-
Literaturhinweise
- Inspiriert von Artikeln von Russ Cox sowie Arbeiten von Cyril Allauzen und Mehryar Mohri.
1 Kommentare
Hacker-News-Kommentare
Cool, ich bin gespannt, wie sich dieses Projekt weiterentwickelt
cat:dogalsca(t:d)ogstatt als(cat):(dog)interpretiert wirdXFST (Xerox Finite-State Transducer) wird empfohlen
Rosie Pattern Language wird als Alternative zu Standard-Regular-Expressions empfohlen
Es wird die Erfahrung geteilt, 1997 eine Arbeit über Finite-State-Transducer geschrieben zu haben
:stärker bindet alsabEs wirkt nicht ausreichend, wenn man strukturelle Ersetzungen durchführen will
Es werden Zweifel an der Behauptung geäußert, dass reguläre Ausdrücke für Textbearbeitung unnatürlich seien
Der C-Code wird für seine große Sauberkeit gelobt
theory.pdfim README ist fehlerhaft und sollte korrigiert werdenEs werden Zweifel an dem Rat geäußert,
*oder+nicht zu verwendenDas erste Beispiel wirkt seltsam
echo 'cat' | trre 'c:da:ot:g'wirkt merkwürdigEs wird bezweifelt, dass die Beispiele echte Programmausgaben sind
echo 'cat dog' | trre 'c:bat|d:hog'wirkt seltsam