770 likes | 895 Views
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