Parsing regulärer Ausdrücke
Karin Haenelt
25.4.2009
1
Inhalt
kontextfreie Grammatik für reguläre Ausdrücke
Grundlagen
Parsebaum: konkrete Syntax
Syntaxbaum: abstrakte Syntax
Algorithmus: Parsing regulärer Ausdrücke
Erkennung
Konstruktion des Syntaxbaumes
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
2
Grammatik für reguläre Ausdrücke
reguläre Ausdrücke beschreiben reguläre Sprachen
Notationssprache für reguläre Ausdrücke
ist keine reguläre Sprache
Sprache enthält Klammern
die beliebig ineinander geschachtelt werden können
ausbalanciert sein müssen (Anzahl öffnender
Klammern = Anzahl schließender Klammern)
ist eine kontextfreie Sprache
Erkennung mit Automaten mit Gedächtnis
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
3
Konkrete Syntax und abstrakte Syntax
konkrete Syntax
Ableitungsbaum der Erkennung mit kontextfreier Grammatik
Parsebaum
Ziel: effiziente Erkennung
abstrakte Syntax
Abstraktion von Details, die zur Weiterverarbeitung nicht
gebraucht werden
Syntaxbaum
Ziel: effiziente Weiterverarbeitung
Ziel: kontextfreie Grammatik – nach der konkrete Syntax und
abstrakte Syntax möglichst ähnlich sind
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
4
Grammatik für arithmetische Ausdrücke, 1. Entwurf
E E E | EE
2 Ableitungen mit 2 Strukturen für 1+2x3
E
E
1
E
+
E
E
2
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
x
x
E
E
3
E
+
E
E
3
1
2
unbrauchbar zur weiteren
Auswertung des Ausdrucks,
falsche Priorität der Rechenregeln
5
Grammatik für reguläre Ausdrücke, 2. Entwurf
Berücksichtigung der Priorität der Operatoren
E PE|P
P T P |T
T id | T * | ( E )
Expression
Product
Terminal
+ vereinigt Produkte
(Operator • hat seine Argumente zuvor gebunden)
• konkateniert Terme
(Operator * hat sein Argument zuvor gebunden)
* bindet sein Argument zuerst
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
6
Kontextfreie Grammatik für reguläre Ausdrücke
Grammatik
E PE|P
Beispiel (a|b)*abb
Ableitungsbaum E
P
P T P |T
T a | ... | | | T * | ( E )
T
(
Die Grammatikregel enthält eine
P
Rechtsrekursion.
Rechtsrekursion lässt sich durch
Iteration darstellen.
T
In einer iterativen Darstellung treten die
a
markierten Ableitungen nicht auf
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
•
T
*
E
)
| E
P
P
T
a
•
P
T • P
b
T
b
T
b
7
Erkennen regulärer Ausdrücke
Grundlage: Grammatik für reguläre Ausdrücke
E→ P+E|P
Ausdruck
P → T •P | T
Produkt
T → 0 | 1 |ε | Ø | T* | (E)
Terminal
(Terminalsymbole können erweitert werden)
weder Lexikon noch Grammatik sind komplex oder veränderlich
Erkenner kann direkt aus der Grammatik abgeleitet werden,
indem man für jede Variable eine Prozedur schreibt
(Hopcroft/Ullman, 1988: 128/129)
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
8
1 procedure FINDE_AUSDRUCK;
3
4
7
12
16
21
23
26
27
31
Algorithmus zur Erkennung
regulärer Ausdrücke
begin
nach Hopcroft/Ullmann 1988:128
FINDE_PRODUKT;
while erste Symbol von STRING ist ’+’ do // Disjunktion
E PE|P
{ stringIndex++; FINDE_PRODUKT; }
end FINDE_AUSDRUCK;
procedure FINDE_PRODUKT;
begin
P T P |T
FINDE_TERM;
T id | T * | ( E )
while erstes Symbol von String ist ’•’ do // Konkatenation
{ stringIndex++; FINDE_TERM; }
end FINDE_PRODUKT;
procedure FINDE_TERM;
T id | ( E ) | T *
begin
erstes Symbol von STRING ist TERMINAL then { stringIndex++;}
if
else if erstes Symbol von STRING ist ’(’ then
{
stringIndex++;
FINDE_AUSDRUCK;
E
PE|P
erstes Symbol von STRING ist ’)’ then stringIndex++;
if
Fehler }
else
while erstes Symbol von STRING ist ’*’ do // Kleenesche Hülle
{stringIndex++;}
© Karin Haenelt,
9
end
FINDE_TERM;
Parsing
regulärer Ausdrücke
25.4.2009, 1 22.5.2005
Ableitungsstruktur nach Algorithmus
1E
Beispiel: (a|b)*abb
3P
12T
23(
26E
3P
12T
21a
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
4|
13•
27)
31*
16T
21a
13•
16T
21b
13•
16T
21b
7P
12T
21b
Die Zahlen geben die Zeile des
Algorithmus an
10
Konstruktion des Syntaxbaumes
Erkennungsalgorithmus
durchläuft nur den Ausdruck und erkennt ihn
gibt accept oder reject aus
erzeugt keine weitere Ausgabe
Konstruktionsanweisungen für den Syntaxbaum müssen an den
entsprechenden Stellen im Algorithmus hinzugefügt werden
Veränderungen gegenüber der konkreten Syntax:
Operatoren als innere Knoten
Operanden als Kinder des Knotens
Symbole des Eingabealphabetes und leere Kette als
terminale Knoten
class TreeNode
Grundstruktur
{
String info;
TreeNode left;
TreeNode right;
© Karin Haenelt,
11
}
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
Ein Parsebaum und Syntaxbaum
(a|b)*abb
Syntaxbaum
Parsebaum
E
(
E
P | P
T
T
a
b
●
P
T
• T • T • T
)
*
a
b
b
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
●
●
●
*
|
a
#
b
b
a
b
12
Vielen Dank
Für das Aufspüren von Fehlern in früheren Versionen und für
Verbesserungsvorschläge danke ich
Victor Gabriel Saiz Castillo, Robert Schumann
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
13
Literatur
Aho, Alfred V.; Sethi, Ravi und Jeffrey D. Ullman (1986).
Compilers. Principles, Techniques and Tools. Addison-Wesley
Publishing Company.
Hopcroft, John E. und Jeffrey D. Ullman (1988). Einführung in
die Automatentheorie, formale Sprachen und
Komplexitätstheorie. Bonn u. a.: Addison-Wesley, 1988 (engl.
Original Introduction to automata theory, languages and
computation).
Hopcroft, John E., Rajeev Motwani und Jeffrey D. Ullman
(2002). Einführung in die Automatentheorie, Formale Sprachen
und Komplexität. Pearson Studium
engl. Original: Introduction to Automata Theory, Languages and
Computation. Addison-Wesley. wwwdb.stanford.edu/~ullman/ialc.html
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
14
Versionen
25.04.2009
06.05.2008, 05.05.2007
27.05.,20.05.2005
© Karin Haenelt,
Parsing regulärer Ausdrücke
25.4.2009, 1 22.5.2005
15