Compilerbauhome Compilerbau: LR-Analyse Prof. Dr. Uwe Schmidt FH Wedel

LR-Analyse

weiter

weiter

Schwäche
von LL(k): Entscheidung, welche Produktion zu wählen ist, an Hand von k Eingabesymbolen
weiter
LR(k)
Auswahl der Produktion erst, nachdem eine ganze rechte Seite analysiert wurde unter Verwendung von k Symbolen Vorausschau
weiter
L.(.)
Von links nach rechts lesen
.R(.)
Rechtsableitung konstruieren
..(k)
k Zeichen vorausschauen
weiter
Rechtsableitung
entspricht einem Aufbau des Syntaxbaumes von den Blättern zur Wurzel hin, indem links im Baum reduziert wird, also eine rechte Seite durch ein Nichtterminalsymbol ersetzt wird.
weiter
Parser
Bestandteile
Stack
noch zu reduzierende Symbole
Input
mit k Symbolen Vorausschau
weiter
Aktionen
weiter
shift
ein Zeichen auf den Stack packen
weiter
reduce
.1
Regel
 
X ::= ABC
 
wählen
weiter
.2
Rechte Seite
 
ABC
 
vom Stack löschen
weiter
.3
Linke Seite
 
X
 
auf dem Stack speichern
weiter
accept
mit
 
S' ::= S $
 
reduzieren
weiter
Start
Stack ist leer
Input enthält gesammtes Programm mit Ende-Marke $
weiter
Beispiel
.0   S ::= E $
.1   E ::= T
.2   E ::= E + T
.3   T ::= F
.4   T ::= T * F
.5   F ::= id
.6   F ::= ( E )
weiter
LR-parsen
allgemeiner als LL-Parsen
jede LL(k)-Grammatik ist auch eine LR(k)-Grammatik
weiter
Linksrekursion
kein Problem
sogar erwünscht
weiter
Linksfaktorisierung
kein Problem
nicht nötig
weiter
Kunst
an Hand des Stack-Inhaltes entscheiden, ob geshifted oder reduziert werden soll.
Kunst
Reduzieren: welche rechte Seite
welche Regel
wieviele Symbole vom Stack nehmen
weiter
Parser- Strategien
LR(0)
ohne Vorausschau
nur sehr wenige Grammatiken
weiter
SLR
Simple LR
LR(0) mit einem Zeichen Vorausschau
Reduzieren nur dann, wenn lookahead aus der Follow-Menge
weiter
LALR(1)
lookahead LR(1)
etwas allgemeiner als SLR(1)
Stand der Technik in verbreiteten Parser-Generatoren
weiter
LR(1)
allgemeiner als LALR(1)
größere Parser-Tabellen
weiter
LR(k)
allgemeiner als LR(1)
keine praktische Relevanz: zu große Parser-Tabellen
weiter
Generatoren
für LALR(1) Grammatiken
 
yacc, bison für C
CUP für Java
happy für Haskell
weiter
Syntaxbaum
Aufbau wärend des Parsens
weiter
Stack
enthält pro Eintrag 2 Informationen
  1. das Symbol
  2. ein zusätzliches Attribut von frei wählbarer Art
weiter
reduzieren
Beim Reduzieren werden aus den Attributen der rechten Seiten ein neues Attribut für die linke Seite berechnet
weiter
Semantische Aktionen
weiter
Arithmetische Ausdrücke mit CUPS

Letzte Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel