1 / 77

Syntaxanalyse Bottom-Up und LR(0)

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)

dava
Download Presentation

Syntaxanalyse Bottom-Up und LR(0)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

  2. 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

  3. 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

  4. Compileraufbau Lexikalische Analyse Syntaxanalyse Semantische Analyse Zwischencode-Generator Code-Optimierer Code-Generator

  5. 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

  6. Grammatik • Besteht aus: • Terminalen • Nichtterminalen • Produktionen • und einem Startsymbol

  7. Grammatik Beispiel: • E  E + E • E  E * E • E  ( E ) • E  id

  8. 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

  9. 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

  10. 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

  11. Parse-Baum für id + id E E  E + E E  E * E E  ( E ) E  id

  12. Parse-Baum für id + id E E + E E  E + E E  E * E E  ( E ) E  id

  13. Parse-Baum für id + id E + E E id E  E + E E  E * E E  ( E ) E  id

  14. Parse-Baum für id + id E + E E id id E  E + E E  E * E E  ( E ) E  id

  15. 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

  16. 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

  17. 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

  18. Bottom-Up-Parsing + id id E  E + E E  E * E E  ( E ) E  id

  19. Bottom-Up-Parsing E + id id E  E + E E  E * E E  ( E ) E  id

  20. Bottom-Up-Parsing E E + id id E  E + E E  E * E E  ( E ) E  id

  21. Bottom-Up-Parsing E E E + id id E  E + E E  E * E E  ( E ) E  id

  22. 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

  23. 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

  24. Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  25. Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  26. Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  27. Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  28. Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  29. Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  30. Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  31. Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  32. Shift-Reduce-Parser Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  33. Shift-Reduce-Parser Parsen von id * id Angelehnt an DragonBook S.286 E  E + T | T T  T * F | F F  ( E ) | id

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. GOTO(I,X) • Spezifiziert einen Folgezustand innerhalb eines LR(0)-Automaten anhand der gegebenen Informationen I: Item Menge und X: Grammatiksymbol

  41. 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

  42. LR(0)-Automat Zunächst Erweiterung der Grammatik zu: • E‘  E • E  E + E • E  E * E • E  ( E ) • E  id

  43. Der LR(0)-Automat DragonBook S.294 E  E + T | T T  T * F | F F  ( E ) | id

  44. 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

  45. Der LR(0)-Automat DragonBook S.294 E  E + T | T T  T * F | F F  ( E ) | id

  46. 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

  47. Der LR(0)-Automat DragonBook S.294 E  E + T | T T  T * F | F F  ( E ) | id

  48. Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

  49. Der LR(0)-Automat DragonBook S.294 E  E + T | T T  T * F | F F  ( E ) | id

  50. Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten Parsen von id * id E  E + T | T T  T * F | F F  ( E ) | id

More Related