Berechnungsgrundlagen für LL(1) Parsing

Werbung
WIRTSCHAFTSINFORMATIK
Westfälische
Wilhelms-Universität
Münster
WIRTSCHAFTS
INFORMATIK
Top-Down-Parsing mit LL(1)
Grammatiken
Tobias Richling
Agenda
WIRTSCHAFTS
INFORMATIK





Grundlagen der Verarbeitung künstlicher Sprachen
- Grammatiken und Sprachen
- Funktionsweise und Formen des Parsers
- Fehlerbehandlung beim Parsen
Merkmale und Einschränkungen von LL(1) Grammatiken
Berechnungsgrundlagen für LL(1) Parsing
- FIRST und FOLLOW
- Die Parsing-Tabelle
Algorithmen für LL(1) Parsing
- Rekursives LL(1) Parsing
- Nicht-rekursives LL(1) Parsing
Fazit und Ausblick
2
WIRTSCHAFTSINFORMATIK
Westfälische
Wilhelms-Universität
Münster
WIRTSCHAFTS
INFORMATIK
Grundlagen der Verarbeitung
künstlicher Sprachen
Agenda
WIRTSCHAFTS
INFORMATIK

Grundlagen der Verarbeitung künstlicher Sprachen
- Grammatiken und Sprachen








Was ist eine Grammatik / Sprache und woraus besteht Sie?
Wie lassen sich Grammatiken kategorisieren?
Eine Beispielgrammatik
Schreibkonventionen
- Funktionsweise und Formen des Parsers
- Fehlerbehandlung beim Parsen
Merkmale und Einschränkungen von LL(1) Grammatiken
Berechnungsgrundlagen für LL(1) Parsing
Algorithmen für LL(1) Parsing
Fazit und Ausblick
4
Definition: Grammatik
WIRTSCHAFTS
INFORMATIK

Eine Grammatik ist formal definiert durch
G = (N, T, P, S)




N: Die Menge der nicht-terminalen Symbole
T: Die Menge der terminalen Symbole
P: Die Menge der Produktionen
- P1: U  α (U ∈ (N ∪ T)*N(N ∪ T)*, α ∈ (N ∪ T)*)
S: Das Startsymbol (∈ N)
5
Kategorisierung von Grammatiken
WIRTSCHAFTS
INFORMATIK

Grammatiken lassen
sich durch die
Chomsky-Hierarchie
kategorisieren
-
Typ 0: rekursiv aufzählbar
Typ 1: kontextsensitiv
Typ 2: kontextfrei
Typ 3: regulär
Typ
3
Typ 2
Typ 1
Typ 0
6
Kontextfreie Grammatiken
WIRTSCHAFTS
INFORMATIK


Kontextfreie Grammatiken sind vom Chomsky-Typ 2.
Alle Produktionen haben folgende Form:
Aα



A ist genau ein nicht-Terminal.
α ist eine beliebige Kombination aus Terminalen und nicht
Terminalen.
Vorteil: nicht-Terminal A kann immer ersetzt werden,
unabhängig von seiner Nachbarschaft.
7
Eine Beispielgrammatik
WIRTSCHAFTS
INFORMATIK





Gegeben seien folgende Produktionen:
- EXPR  VAR OP VAL
- EXPR  ( EXPR )
- EXPR  EXPR REL EXPR
- VAR  x | y
- VAL  1 | 2 | 3 | … | 9
- OP  = | != | < | > | <= | >=
- REL  and | or
N = {EXPR, VAR, OP, VAL, REL}
T = {(, ), x, y, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, =, !=, <, >, <=, >=,
and, or}
S = EXPR
Welche Sätze lassen sich mit dieser Grammatik bilden?
8
Beispiele
WIRTSCHAFTS
INFORMATIK
Startsymbol
EXPR
Regel 3
EXPR
Regel 1 für EXPR
VAR
Auflösen in Terminale
x
REL
OP
!=
VAL
5
1. EXPR  VAR OP VAL
2. EXPR  ( EXPR )
3. EXPR  EXPR REL EXPR
or
EXPR
VAR
OP
VAL
y
=
7
4. VAR  x | y
5. VAL  1 | 2 | 3 | … | 9
6. OP  = | != | < | > | <=
| >=
7. REL  and | or
9
Beispiele
WIRTSCHAFTS
INFORMATIK
Startsymbol
EXPR
Regel 3
EXPR
REL
Regel 1 / 2
VAR
OP
VAL
Regel 3
x
>
3
EXPR
and
(
EXPR
)
REL
Regel 1 / 1
VAR
OP
VAL
Restliche NT auflösen
y
=
5
1. EXPR  VAR OP VAL
2. EXPR  ( EXPR )
3. EXPR  EXPR REL EXPR
EXPR
or
EXPR
VAR
OP
VAL
y
=
7
4. VAR  x | y
5. VAL  1 | 2 | 3 | … | 9
6. OP  = | != | < | > | <=
| >=
7. REL  and | or
10
Agenda
WIRTSCHAFTS
INFORMATIK

Grundlagen der Verarbeitung künstlicher Sprachen
- Grammatiken und Sprachen
- Funktionsweise und Formen des Parsers





Einordnung des Parsers
Arten des Parsing
- Fehlerbehandlung beim Parsen
Merkmale und Einschränkungen von LL(1) Grammatiken
Berechnungsgrundlagen für LL(1) Parsing
Algorithmen für LL(1) Parsing
11
Einordnung des Parser
WIRTSCHAFTS
INFORMATIK
Parser
Lexikalische
Analyse
Syntaktische
Analyse
Semantische
Analyse
Codegenerierung
/ -optimierung
•Eingabe:
Zeichenstrom
•Ausgabe: Tokenstrom
•Ausgabe:
Syntaxbaum
•Ausgabe:
Syntaxbaum
•Ausgabe:
Maschinencode
12
Aufgabe des Parsers
WIRTSCHAFTS
INFORMATIK





Die Aufgabe des Parser ist die syntaktische Analyse einer
Tokenfolge.
Die Tokenfolge wird von links nach rechts verarbeitet.
Es muss geprüft werden, ob die vorliegende Tokenfolge
aus den Produktionen gebildet werden kann.
Es werden schrittweise Produktionen angewendet.
Wenn sich die Eingabefolge bilden lässt, ist diese
syntaktisch korrekt, andernfalls enthält sie (oder der
Parser) Syntaxfehler.
13
Arten des Parsing
WIRTSCHAFTS
INFORMATIK



Nach „Richtung“
- Top-Down-Parsing
- Bottom-Up-Parsing
Nach „Weitblick“
- Nicht vorausschauendes (non-predictive) Parsing
- Vorausschauendes (predictive) Parsing
Nach „Algorithmusstruktur“
- Rekursiv
- Nicht rekursiv
14
Die Idee des Parsing
WIRTSCHAFTS
INFORMATIK
(
x
= 7
)
EXPR
(
EXPR
(
VAR
(
x
OP
(
x
=
VAL
(
x
=
7
)
OP
VAL
VAL
)
)
1.
2.
3.
4.
5.
6.
7.
EXPR  VAR OP VAL
EXPR  ( EXPR )
EXPR  EXPR REL EXPR
VAR  x | y
VAL  1 | 2 | 3 | … | 9
OP  = | != | < | > | <= | >=
REL  and | or
)
)
15
Probleme aus den Beispielen
WIRTSCHAFTS
INFORMATIK

Zwei Zentrale Fragen:
1. Welches nicht-Terminal soll als nächstes expandiert
werden?
2. Welche Produktion wird verwendet, wenn es mehrere
Alternativen gibt.

Diese beiden Fragen sind für das Parsen zentral, wie sich
später noch zeigen wird.
16
Agenda
WIRTSCHAFTS
INFORMATIK

Grundlagen der Verarbeitung künstlicher Sprachen
- Grammatiken und Sprachen
- Funktionsweise und Formen des Parsers
- Fehlerbehandlung beim Parsen




Welche Möglichkeiten hat der Parser, auf Fehler zu reagieren?
Merkmale und Einschränkungen von LL(1) Grammatiken
Berechnungsgrundlagen für LL(1) Parsing
Algorithmen für LL(1) Parsing
17
Was wenn‘s schiefgeht?
WIRTSCHAFTS
INFORMATIK






Die Nachfolgend beschriebenen Parsing-Methoden habe
die „viable-prefix“ Eigenschaft.
D.h. sie erkennen Fehler so früh wie möglich.
Ein Quellprogramm hat (wahrscheinlich) mehr als einen
Fehler.
Also wäre es schön, wenn der Parser zunächst
weiterarbeiten würde, wenn er einen Fehler findet.
Sonst muss der Entwickler von Fehler zu Fehler „hoppeln“.
Aber: was soll der Parser denn tun?
- Präzise Fehlermeldung
- Trotzdem weitermachen (Error recovery)  und wie?
- Möglichst wenig zusätzliche Arbeit dadurch produzieren.
18
Ansätze zur Fehlerbehandlung
WIRTSCHAFTS
INFORMATIK

Panic-Mode Recovery
- Der Parser überspringt ab dem Fehler eine Menge von Token, bis er
ein „synchronizing Token“ findet.
Dazu eignen sich z.B. in C# „}“ oder „;“

Phrase-Level Recovery
- Wenn der Parser weiß, was klemmt, kann er die Eingabezeichenfolge
verändern.
Zum Beispiel: fehlendes Semikolon.

Error Productions
- Bestimmte Fehler werden antizipiert und für diese existieren
-

Produktionen.
Der Parser kann arbeiten, weiß aber, dass ein Fehler aufgetreten ist,
wenn er eine Fehlerproduktion verwendet hat.
Global Correction
- Finde eine minimale Folge von Änderungen, um aus einem falschen
-
ein korrektes Programm zu machen.
Sehr aufwändig.
19
WIRTSCHAFTSINFORMATIK
Westfälische
Wilhelms-Universität
Münster
WIRTSCHAFTS
INFORMATIK
Merkmale und
Einschränkungen von LL(1)
Grammatiken
Agenda
WIRTSCHAFTS
INFORMATIK




Grundlagen der Verarbeitung künstlicher Sprachen
Merkmale und Einschränkungen von LL(1) Grammatiken
- Merkmale LL(1) Grammatiken
- Diverse Probleme und mögliche Lösungen
- Die „verwandelte“ Beispielgrammatik
Berechnungsgrundlagen für LL(1) Parsing
Algorithmen für LL(1) Parsing
21
Merkmale von LL(1)-Grammatiken
WIRTSCHAFTS
INFORMATIK

Zum Begriff LL(1):
- Erstes L: Verarbeite Eingabe von links nach rechts.
- Zweites L: Expandiere immer das am weitesten links stehende
nicht-Terminal (Frage 1!).
- (1): Es wird immer ein Eingabezeichen (Lookahed) zur eindeutigen
Entscheidung über die zu verwendende Produktion benutzt (Frage
2!).

Merkmale / Einschränkungen:
- Kontextfrei
- Nicht mehrdeutig
- Nicht linksrekrusiv
- „Linksbündig“ (left factoring)
- „Linkseindeutig“
22
Linksrekursivität: Das Problem
WIRTSCHAFTS
INFORMATIK

Man betrachte den
Ausdruck
x = 7 and y = 10

Wie kann der Parser
zwischen Regel 1 und
3 entscheiden?

Antwort: Gar nicht!
1. EXPR  VAR OP VAL
2. EXPR  ( EXPR )
3. EXPR  EXPR REL
EXPR
4. VAR  x | y
5. VAL  1 | 2 | 3 | … | 9
6. OP  = | != | < | > | <= |
>=
7. REL  and | or
23
Linksrekursivität: Definition
WIRTSCHAFTS
INFORMATIK

Eine Produktion ist linksrekrusiv, wenn sie folgende Form
hat:
EXPR  EXPR REL EXPR



Hier taucht das zu ersetzende nicht-Terminal EXPR direkt
am Anfang im Körper der Produktion auf.
Im allgemeinen reicht es aus, wenn sich diese Form erst in
mehreren Schritten ergibt.
Ist folgende Produktion linksrekursiv?
EXPR  ( EXPR )
24
Linksrekursivität: Weg damit!
WIRTSCHAFTS
INFORMATIK




Die linksrekursive Produktion muss korrigiert werden, der
linksrekursive Teil muss weg:
EXPR‘  REL EXPR EXPR‘
Das neue nicht-Terminal wird an alles angehängt, was
eine EXPR ist:
EXPR  VAR OP VAL EXPR‘
EXPR  ( EXPR ) EXPR‘
Jetzt muss aber immer auf jede EXPR eine EXPR‘ folgen.
EXPR‘ muss wegfallen können, also Erweiterung der
ersten Regel:
EXPR‘  REL EXPR EXPR‘ | ε
25
Linksbündigkeit: Das Problem
WIRTSCHAFTS
INFORMATIK





Eine neue Anforderung: man möchte auch Ausdrücke der
Form „x = y“ schreiben können.
Also Erweiterung der Grammatik:
EXPR  VAR OP VAL (alt)
EXPR  VAR OP VAR (neu)
Man betrachte den Ausdruck
x=7
Wie kann sich der Parser zwischen den beiden Regeln
entscheiden?
Antwort: Gar nicht!
26
Linksbündigkeit: Die Lösung
WIRTSCHAFTS
INFORMATIK




Nach dem Motto: „Was du später noch erledigen kannst,
da kümmere dich jetzt noch nicht drum!“
Behalte die gemeinsamen Teile aller Alternativen in einer
Regel.
Lagere die Varianten in einer neuen Regel mit
entsprechenden Alternativen aus.
Also Änderung der Grammatik:
EXPR  VAR OP ETAIL
ETAIL  VAR | VAL
27
Linkseindeutigkeit: Das Problem
WIRTSCHAFTS
INFORMATIK





Eine neue (dumme) Idee: als Variable soll auch die „1“
erlaubt sein. (Ergibt in einer leicht abgewandelten
Grammatik aber Sinn)
Man betrachte nun folgenden Ausdruck
x=1
Die „1“ steht für VAR oder VAL.
Wie soll sich der Parser für die gemeinte Variante
entscheiden?
Antwort: Gar nicht!
28
Linkseindeutigkeit: Die Lösung
WIRTSCHAFTS
INFORMATIK

„Lass den Unfug!“

Produktionen dieser Art müssen entfernt oder
umgeschrieben werden.

Keine allgemeine Regel hierzu.

In C# ist für Bezeichner z.B. vorgeschrieben, dass diese
mit einem Buchstaben beginnen müssen.
29
Die „neue“ Beispielgrammatik
WIRTSCHAFTS
INFORMATIK
1.
2.
3.
4.
5.
6.
7.
8.
EXPR  VAR OP ETAIL EXPR‘
EXPR  ( EXPR ) EXPR‘
EXPR‘  REL EXPR EXPR‘ | ε
ETAIL  VAR | VAL
VAR  x | y
VAL  1 | 2 | 3 | … | 9
OP  = | != | < | > | <= | >=
REL  and | or
30
WIRTSCHAFTSINFORMATIK
Westfälische
Wilhelms-Universität
Münster
WIRTSCHAFTS
INFORMATIK
Berechnungsgrundlagen für
LL(1) Parsing
Agenda
WIRTSCHAFTS
INFORMATIK



Grundlagen der Verarbeitung künstlicher Sprachen
Merkmale und Einschränkungen von LL(1) Grammatiken
Berechnungsgrundlagen für LL(1) Parsing
- FIRST und FOLLOW



Definition & Berechnung der Menge FIRST
Definition & Berechnung der Menge FOLLOW
- Die Parsing-Tabelle
Algorithmen für LL(1) Parsing
32
Die Menge FIRST
WIRTSCHAFTS
INFORMATIK
Idee: Mit welchen
Terminalen kann eine
Zeichenfolge
beginnen, die aus
einem bestimmten
nicht-Terminal
abgeleitet ist?
 Untersuche alle
Alternativen des
fraglichen NT und
deren erste Elemente.

1.
2.
3.
4.
5.
6.
7.
8.
EXPR  VAR OP ETAIL EXPR‘
EXPR  ( EXPR ) EXPR‘
EXPR‘  REL EXPR EXPR‘ | ε
ETAIL  VAR | VAL
VAR  x | y
VAL  1 | 2 | 3 | … | 9
OP  = | != | < | > | <= | >=
REL  and | or




Beispiele:
FIRST(EXPR) = { x, y, ( }
FIRST(EXPR’) = { and, or, ε }
FIRST(ETAIL) = { x, y, 0, ..., 9 }
33
Die Menge FOLLOW
WIRTSCHAFTS
INFORMATIK
Idee: Welche
Terminale können
direkt auf ein nichtTerminal folgen?
 Suche alle
Vorkommnisse des
gefragten NT im
Körper der
Produktionen und
untersuche deren
Nachfolger.

1.
2.
3.
4.
5.
6.
7.
8.
EXPR  VAR OP ETAIL EXPR‘
EXPR  ( EXPR ) EXPR‘
EXPR‘  REL EXPR EXPR‘ | ε
ETAIL  VAR | VAL
VAR  x | y
VAL  1 | 2 | 3 | … | 9
OP  = | != | < | > | <= | >=
REL  and | or




Beispiele:
FOLLOW(EXPR) = { $, ), and, or }
FOLLOW(EXPR’) = { $, ), and, or }
FOLLOW(ETAIL) = { $, ), and, or }
34
Agenda
WIRTSCHAFTS
INFORMATIK



Grundlagen der Verarbeitung künstlicher Sprachen
Merkmale und Einschränkungen von LL(1) Grammatiken
Berechnungsgrundlagen für LL(1) Parsing
- FIRST und FOLLOW
- Die Parsing-Tabelle



Aufbau der Parsing-Tabelle
Berechnung der Parsing-Tabelle
Algorithmen für LL(1) Parsing
35
Parsing-Tabelle: Motivation
WIRTSCHAFTS
INFORMATIK





Beim „vom Hand parsen“ unserer Beispiele fiel die
Auswahl der Produktion leicht: man verwendet
„Okularinspektion“.
Der Computer hat damit seine Schwierigkeiten.
Der Mensch auch: bei komplexeren Sprachen (C#) oder
längeren Eingaben.
Wie lässt sich die Entscheidungssituation systematisieren?
Welche Information steht in jedem Schritt zur Verfügung:
- Ein nicht-Terminal, das zu expandieren ist, oder ein Terminal das
gemacht werden muss.
- Ein aktuelles Eingabesymbol.

Was müssen wir daraus ermitteln:
- Die zu verwendende Produktion
36
Die Parsing-Tabelle
WIRTSCHAFTS
INFORMATIK


Für das „matchen“ braucht man keine Hilfe: passt oder
passt nicht.
Es reduziert sich also auf:
M(NT, Lookahead) = Produktion


Idee: fasse diese Informationen in einer Tabelle
zusammen.
Aufbau der Tabelle:
- In den Zeilen befinden sich die nicht-Terminalen
- In den Spalten befinden sich die Terminalen
- In den Zellen steht die Produktion (leere Zelle  Fehler)
37
Wie kommt man drauf?
WIRTSCHAFTS
INFORMATIK

Zum Beispiel durch
scharfes Nachdenken
- Beispiel: EXPR soll
-
-
expandiert werden.
Welche Terminale
kommen überhaupt in
Frage?
Antwort: (, x, y
Welche Regeln für
welches NT:



(  Regel 2
x, y  Regel 1
Oder formaler: durch die
Mengen FIRST /
FOLLOW
1. EXPR  VAR OP
ETAIL EXPR‘
2. EXPR  ( EXPR )
EXPR‘
3. EXPR‘  REL EXPR
EXPR‘ | ε
4. ETAIL  VAR | VAL
5. VAR  x | y
6. VAL  1 | 2 | 3 | … | 9
7. OP  = | != | < | > | <=
| >=
8. REL  and | or
38
Ausschnitt aus der PT der BG
WIRTSCHAFTS
INFORMATIK
(
x
y
E
VAR O VAL E‘
E
VAR O VAL E‘
ETAIL
ETVAR
ETVAR
VAR
VARx
VARy
EXPR
EXPR‘
)
E
( E ) E‘
0
E‘ε
ETVAL
39
Parsing-Tabelle: Mehrdeutigkeiten
WIRTSCHAFTS
INFORMATIK




Bei der Berechnung der Parsing-Tabelle können
Mehrdeutigkeiten in der Grammatik auffallen.
Diese zeigen sich durch mehrfache Einträge in einer
Zelle.
In unserem Beispiel betrifft dies die Regeln für
EXPR‘
Auszug aus der Parsing-Tabelle
EXPR‘
(
and
or
$
EXPR‘  ε
E‘  REL
EXPR EXPR‘
E‘  REL
EXPR EXPR‘
EXPR‘  ε
Oder
Oder
EXPR‘  ε
EXPR‘  ε
40
Parsing-Tabelle: Mehrdeutigkeiten
WIRTSCHAFTS
INFORMATIK
Wie kann das sein?
 Man betrachte den
Ausdruck
EXPR

...
EXPR'
REL
EXPR
or
(
EXPR
… or (x = 5) and …
Welches EXPR‘ soll
wie expandiert
werden?
 Antwort: „Egal“
EXPR'
)
EXPR'
x=5
EXPR
EXPR

...
RELREL
or
or
EXPR'
EXPR'
EXPR
EXPR
(
(
EXPR
EXPR
x=5
x=5
)
EXPR'
EXPR'
)
EXPR'
EXPR'
REL
ε
REL
…
ε
…
and
and
41
Parsing-Tabelle: Mehrdeutigkeiten
WIRTSCHAFTS
INFORMATIK



Was tun?
„Entscheide dich!“ (für eine der Möglichkeiten)
Hier:
- Die Grammatik „sammelt“ „rechts unten“ im Baum EXPR‘
Symbole.
- Heuristik: Expandiere immer das innerste EXPR‘ bei and / or und
die „unnötigen“ EXPR‘ am Ende zu e.
- Führt zu einem rechtslastigen Parse-Tree.
EXPR‘
(
and
or
$
EXPR‘  ε
E‘  REL
EXPR EXPR‘
E‘  REL
EXPR EXPR‘
EXPR‘  e
Oder
Oder
EXPR‘  ε
EXPR‘  ε
42
WIRTSCHAFTSINFORMATIK
Westfälische
Wilhelms-Universität
Münster
WIRTSCHAFTS
INFORMATIK
Algorithmen für LL(1) Parsing
Agenda
WIRTSCHAFTS
INFORMATIK




Grundlagen der Verarbeitung künstlicher Sprachen
Merkmale und Einschränkungen von LL(1) Grammatiken
Berechnungsgrundlagen für LL(1) Parsing
Algorithmen für LL(1) Parsing
- Rekursives LL(1) Parsing


Grundlagen des rekursiven Parsing
Rekursives Parsen einer LL(1) Grammatik
- Nicht-rekursives LL(1) Parsing
44
Rekursives Parsen: Die Idee
WIRTSCHAFTS
INFORMATIK


Ein rekursiver Parser besteht aus einer Menge sich
gegenseitig aufrufender Prozeduren.
Es gibt eine Prozedur pro nicht-Terminal der Sprache,
welche die Struktur der möglichen Alternativen
„nachahmt“.
- Bei mehreren Alternativen muss gewählt werden. Im Fall von LL(1)
eindeutig, sonst u.U Backtracking


Es gibt eine weitere Prozedur zum matchen von
Terminalen.
Wenn alles gemacht werden kann, ist die Folge ok, sonst
enthält sie (oder der Parser) Fehler.
45
Rekursives Parsing: Algorithmus
WIRTSCHAFTS
INFORMATIK
void A() {
Wähle eine A-Produktion AX1X2…Xk;
for (i = 1 to k) {
if (Xi ist ein nicht-Terminal)
Aufruf von Prozedur Xi;
else if (Xi entspricht aktuellem Eingabesymbol)
Gehe zum nächsten Eingabesymbol;
else /* Fehler */
}
}
46
Rekursives Parsing: Beispiel
WIRTSCHAFTS
INFORMATIK
private void Expr() {
switch (Lookahead)
{
case "(":
Match(“(“);
Expr();
Match(„)“);
Expr_1();
break;
private void Var() {
switch (Lookahead.Value)
{
case "x":
Match(“x“);
break;
case "y":
Match(“y“);
break;
case "x":
case "y":
Var(); Op(); Val(); Expr_1();
break;
default:
Report("Syntax error", true);
break;
}
default:
Report("Error");
break;
}
}
}
47
Agenda
WIRTSCHAFTS
INFORMATIK




Grundlagen der Verarbeitung künstlicher Sprachen
Merkmale und Einschränkungen von LL(1) Grammatiken
Berechnungsgrundlagen für LL(1) Parsing
Algorithmen für LL(1) Parsing
- Rekursives LL(1) Parsing
- Nicht-rekursives LL(1) Parsing



Aufbau des nicht-rekursiven Parsing
Ablauf des nicht-rekursiven Parsing
Ein Beispiel dazu
48
Nicht-rekursives Parsing: Aufbau
WIRTSCHAFTS
INFORMATIK
Eingabe
X
a
+
b
Parser-Programm
$
Ausgabe
Y
Z
$
Parsing-Tabelle
Stack
49
Nicht-rekursives Parsing
WIRTSCHAFTS
INFORMATIK
Input
(
x
Stack
xVAR
=
OP
(
7
VAL
EXPR
EXPR
)
Erkannt
= 7
(
)
1.
2.
3.
4.
5.
6.
7.
8.
x
= 7
)
EXPR  VAR OP ETAIL EXPR‘
EXPR  ( EXPR ) EXPR‘
EXPR‘  REL EXPR EXPR‘ | ε
ETAIL  VAR | VAL
VAR  x | y
VAL  1 | 2 | 3 | … | 9
OP  = | != | < | > | <= | >=
REL  and | or
50
WIRTSCHAFTSINFORMATIK
Westfälische
Wilhelms-Universität
Münster
WIRTSCHAFTS
INFORMATIK
Fazit
Fazit
WIRTSCHAFTS
INFORMATIK




Formale Grundlagen stellen einen wichtigen Teil des
Parsing dar.
- FIRST
- FOLLOW
- Parsing Tabelle
Die Algorithmen selber sind relativ einfach.
Ein allgemeiner (auf einer Parsing-Table basierender) nicht
rekursiver Parser ist recht schnell implementiert.
- Wer Interesse hat, kann sich melden.
Es gibt diverse Parser-Generatoren, die einem diese Arbeit
(wenn man es so nennen will) jedoch abnehmen.
52
WIRTSCHAFTSINFORMATIK
Westfälische
Wilhelms-Universität
Münster
WIRTSCHAFTS
INFORMATIK
Vielen Dank für Ihre
Aufmerksamkeit
Haben Sie noch Fragen?
WIRTSCHAFTSINFORMATIK
Westfälische
Wilhelms-Universität
Münster
WIRTSCHAFTS
INFORMATIK
Backup
Formale Definition von FIRST
WIRTSCHAFTS
INFORMATIK
1. Wenn X ein Terminal ist, dann ist FIRST(X) = {X}.
2. Wenn X ein nicht-Terminal ist und eine Produktion X 
Y1Y2…Yk für ein k ≥ 1, dann ist a Bestandteil von
FIRST(X) wenn es für ein beliebiges i in FIRST(Yi) ist,
und ε in allen Mengen FIRST(Y1), …, FIRST(Yi-1) ist.
Wenn ε in allen k Yi dann ist ε auch in FIRST(X)
3. Wenn X  ε eine Produktion der Grammatik ist, dann ist
ε in FIRST(X).
55
Formale Definition von FOLLOW
WIRTSCHAFTS
INFORMATIK
1. $ ist Element von FOLLOW(S), mit S als Startsymbol
2. Für eine Produktion sind alle Elemente aus FIRST(β) in
FOLLOW(B), ausgenommen ε.
3. Wenn eine Produktion existiert oder bei der Produktion
in der Menge FIRST(β) das ε enthalten ist, dann sind alle
Elemente von FOLLOW(A) auch in FOLLOW(B)
56
Berechnung der Parsing-Tabelle
WIRTSCHAFTS
INFORMATIK
1. Durchlaufe alle Produktionen (A  α)
2. Füge A  α in der Zeile A in alle Spalten ein, die sich in
FIRST(α) befinden.
3. Wenn ε in FIRST(α), dann trage die Regel auch noch in
alle Spalten aus FOLLOW(A) ein (inklusive $)
57
Beispiel zu Regel 3
WIRTSCHAFTS
INFORMATIK











A(A)
ABC
B1|ε
C2|ε
(
)
1
2
$
(A)
BC
BC
BC
BC
B
ε
1
ε
ε
C
ε
2
ε
A
FIRST(A) = {(, 1, 2, ε}
FIRST(B) = {1, ε}
FIRST(C) = {2, ε}
FOLLOW(A) = {), $}
FOLLOW(B) = {2, ), $}
FOLLOW(C) = {), $}
FOLLOW(B C) = {1, 2, ε}
Beispiele:
$: A  B C  ε C  ε ε  ε
(): A  ( A )  ( B C )  (ε ε)  ()
2: A  B C  ε C  2
58
„Dangeling Else“
WIRTSCHAFTS
INFORMATIK

STMT  if (BED) STMT CONDELSE
STMT  other
CONDELSE  else STMT | ε
BED  bool

Ausdruck:



if ( bool ) if (bool) other else other
STMT
if (bool)
STMT
If (bool)
STMT
CONDELSE
CONDELSE
other
59
Herunterladen