ppt

Werbung
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 | EE
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  PE|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  PE|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  PE|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
PE|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
Herunterladen