770 likes | 912 Vues
Syntaxanalyse Bottom-Up und LR(0). Daniel Matthey. Agenda. Basics Compileraufbau Grammatiken Ableitungen Beispiel Parse-Baum Mehrdeutigkeit Bottom-Up-Parsing Shift - Reduce -Parser inkl. Beispiel LR(0)-Syntaxanalyse Items Die Funktionen CLOSURE(I) und GOTO(I,X)
                
                E N D
Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
Compileraufbau Lexikalische Analyse Syntaxanalyse Semantische Analyse Zwischencode-Generator Code-Optimierer Code-Generator
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
Grammatik • Besteht aus: • Terminalen • Nichtterminalen • Produktionen • und einem Startsymbol
Grammatik Beispiel: • E  E + E • E  E * E • E  ( E ) • E  id
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
Ableitungen • E → E + E → E + id → id + id • E → E + E → id + E → id + id E  E + E E  E * E E  ( E ) E  id
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
Parse-Baum für id + id E E  E + E E  E * E E  ( E ) E  id
Parse-Baum für id + id E E + E E  E + E E  E * E E  ( E ) E  id
Parse-Baum für id + id E + E E id E  E + E E  E * E E  ( E ) E  id
Parse-Baum für id + id E + E E id id E  E + E E  E * E E  ( E ) E  id
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
Mehrdeutigkeit Beispiel: id * id + id E E E E E E id id + id + id id id * * E  E + E E  E * E E  ( E ) E  id
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
Bottom-Up-Parsing + id id E  E + E E  E * E E  ( E ) E  id
Bottom-Up-Parsing E + id id E  E + E E  E * E E  ( E ) E  id
Bottom-Up-Parsing E E + id id E  E + E E  E * E E  ( E ) E  id
Bottom-Up-Parsing E E E + id id E  E + E E  E * E E  ( E ) E  id
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
Shift-Reduce-Parser • Neue Grammatik: • E  E + T | T • T  T * F | F • F  ( E ) | id • Rechtsableitung zu id * id: E → T → T * F → T * id → F * id → id * id
Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser Parsen von id * id Angelehnt an DragonBook S.286 E  E + T | T T  T * F | F F  ( E ) | id
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
LR(0)-Syntaxanalyse • LL(k) und LR(k)-Sprachen: • erste Buchstabe steht für die Eingabe • zweiter Buchstabe steht für umgekehrte Ableitung • k wird Lookahead genannt
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
Items • Statt Grammatiksymbole auf dem Stack nun Zustände, die aus einer Menge von Items bestehen • Folgende Items, für die Entscheidungsunterstützung, enthält die Produktion T  T * F: • T  .T * F • T  T .* F • T  T * .F • T  T * F. • Wir sehen 3 verschiedene Fälle
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
CLOSURE(I) • Bildet eine Hülle von einer Menge von Items durch: • Füge I zu CLOSURE(I) hinzu • Gibt es ein Item A  a.Bb in CLOSURE(I) und eine Produktion B  x, so füge B  .x zu CLOSURE(I) hinzu
GOTO(I,X) • Spezifiziert einen Folgezustand innerhalb eines LR(0)-Automaten anhand der gegebenen Informationen I: Item Menge und X: Grammatiksymbol
Agenda • Basics • Compileraufbau • Grammatiken • Ableitungen • Beispiel Parse-Baum • Mehrdeutigkeit • Bottom-Up-Parsing • Shift-Reduce-Parser inkl. Beispiel • LR(0)-Syntaxanalyse • Items • Die Funktionen CLOSURE(I) und GOTO(I,X) • Der LR(0)-Automat inkl. Beispiel • Parsertabellen • Beispiel
LR(0)-Automat Zunächst Erweiterung der Grammatik zu: • E‘  E • E  E + E • E  E * E • E  ( E ) • E  id
Der LR(0)-Automat DragonBook S.294 E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten Parsen von id * id GOTO(0,id) gibt uns Zustand 5 an E  E + T | T T  T * F | F F  ( E ) | id
Der LR(0)-Automat DragonBook S.294 E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten Parsen von id * id Gibt es keinen Folgezustand, weiß der Parser, dass er reduzieren soll. Bei einer Reduktion wird zunächst der Produktionsrumpf vom Stack entfernt und der Produktionskopf verschoben. Zustand 5  0  3 E  E + T | T T  T * F | F F  ( E ) | id
Der LR(0)-Automat DragonBook S.294 E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id
Der LR(0)-Automat DragonBook S.294 E  E + T | T T  T * F | F F  ( E ) | id
Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id