Offene Fragen
|
|
?
|
Praxisrelevanz, Anwendungen?
|
?
|
Laufzeit- und Speicherplatzeffizienz?
|
?
|
Erweiterbarkeit
|
| |
Effizienz
|
|
|
Sequenz und * vergrößern die Ausdrücke
|
|
Im schlimmsten Fall exponentielles Wachstum in Abhängigkeit von der Wortlänge, der Anzahl der Ableitungen
|
|
Unpraktikabel
|
| |
Ausweg, Verbesserung
|
beim Konstruieren der Ausdrücke in Δ partiell auswerten und vereinfachen
|
Gesetzte
|
zur Vereinfachung
|
|
r ∪ {} = r
|
|
{} ∪ r = r
|
|
r ∪ r = r
|
|
r1 ∪ r2 = r2 ∪ r1
|
|
(r1 ∪ r2) ∪ r3 = r1 ∪ (r2 ∪ r3)
|
|
r ⋅ {} = {}
|
|
{} ⋅ r = {}
|
|
r ⋅ {ε} = r
|
|
{ε} ⋅ r = r
|
| |
Umsetzung
|
durch "intelligente" Konstruktoren
|
Beispiel: r1 ∪ r2 |
union :: Eq a => RE a -> RE a -> RE a
union r1 Zero = r1
union Zero r2 = r2
union r1 r2
| r1 == r2 = r1
| otherwise = Union r1 r2
|
Beispiel: r1 ⋅ r2
|
analog
|
|
Platzbedarf bleibt (fast immer) beschränkt, hängt nicht mehr von der Eingabe ab
|
|
Laufzeit für δ und Δ bleibt (fast immer) beschränkt, hängt nicht mehr von der Eingabe ab
|
|
Es gibt worst-case-Fälle, bei denen der abgeleitete reguläre Ausdruck extrem wächst.
|
Beispiel |
r=a?{n}a{n}
|
Allgemein |
Der Ausdruck besteht aus einer Sequenz von R.E.s, die alle das leere Wort enthalten.
|
| |
Erweiterbarkeit
|
um Mengendurchschnitt, Differenz, Komplement, exklusives Oder
|
|
Sehr einfach umzusetzen
|
Beispiel: r1 ∩ r2
|
|
Datenstruktur
|
data RE a = ...
| Intersect (RE a) (RE a)
| ...
|
δ
|
nullable (Intersec r1 r2) = nullable r1
&& nullable r2
|
Δ
|
delta (Intersect r1 r2) a
= Intersect
(delta r1 a)
(delta r2 a)
|
Vereinfachung
|
intersect :: Eq a => RE a -> RE a -> RE a
intersect r1 Zero = Zero
intersect Zero r2 = Zero
intersect r1 Unit = Unit
intersect Unit r2 = Unit
intersect r1 r2
| r1 == r2 = r1
| otherwise = Intersect r1 r2
|
|
analog für Differenz, Komplement, ...
|
Praxisrelevanz, Anwendungen
|
|
? |
für grep, sed, perl, lex, ...
|
shortest match
|
reguläre Ausdrücke aus Perl, z.B. für Kommentare
(/*...*/), können auf einfache Weise in reguläre
Ausdrücke mit Differenz-Operatoren transformiert werden.
|
XML, DTD, XML Schema, RelaxNG
|
Validierung des Inhalts eines Elements gegen das Inhaltsmodell
|