VU Software Paradigmen 716.060 / SS 2014 Thorsten Ruprechter ruprechter@tugraz.at Institute for Software Technology 1
Organisatorisches Ausgabe: 25.03. (heute) Fragestunde: 22.04. Abgabe: 29.04 (ausgedruckt) Einsichtnahme: wird bekanntgegeben Gruppengröße: 2 tu-graz.lv.swp.gruppensuche gemeinsame Abgabe Institute for Software Technology 2
Inhalt Grammatiken Allgemeines & Produktionsregeln Parse Trees Chomsky-Sprachhierarchie LL(1) Allgemeines FIRST & FOLLOW Parse-Table Scala Institute for Software Technology 3
Grammatik - Allgemeines Definiert mögliche Wörter einer Sprache Grammatik ist 4-Tupel Nonterminale Terminale (unterstrichen) Startsymbol Endliche Menge von Produktionsregeln α β Institute for Software Technology 4
Grammatik Produktionsregel Def.: β kann von α abgeleitet werden α β Aneinanderreihung von Non-Terminalen und Terminalen mindestens ein Non-Terminal Aneinanderreihung von Non-Terminalen und Terminalen inklusive leere Menge Institute for Software Technology 5
Grammatik - Beispiel Institute for Software Technology 6
Grammatik - Sprachhierarchie Chomsky Hierarchie = 4 Ebenen unterscheidet nach Komplexität prod. Sprachen hier von keine Regeln bis strikte Regeln geordnet [Typ 0] allgemein/uneingeschränkt [Typ 1] kontext-sensitiv [Typ 2] kontext-frei [Typ 3] regulär Institute for Software Technology 7
Sprachhierarchie - uneingeschränkt Allgemeine Grammatiken unrestricted Jede gültige Grammatik, welche keine Restriktionen bezüglich der Ableitung aufweist Def: G: keine Restriktionen bezüglich α β Institute for Software Technology 8
Sprachhierarchie kontext-sensitiv alle Regeln von uneingeschränkten Grammatiken erfüllt nicht mehr Symbole produziert als gelöscht = Anzahl Symbole links kleiner gleich Anzahl Symbole rechts Def: G sens : α β Institute for Software Technology 9
Sprachhierarchie kontext-frei alle Regeln von kontext-sensitiven Grammatiken erfüllt zusätzlich: α = genau EIN Non-Terminal Def: G free : α β, α V N Institute for Software Technology 10
Sprachhierarchie regulär alle Regeln von kontext-freien Grammatiken erfüllt Zusätzlich: β = aa oder β = a a = Terminal oder leer (epsilon/ε) A = Non-Terminal Def: α β, α V N, β hat Form aa oder a, mit a V T {ε}, A V N Institute for Software Technology 11
Parse Trees Parser Überprüft, ob Satz in Sprache (= durch Grammatik definiert) vorhanden ist Kann Zeichenkette durch Grammatik geparst werden? Visuelle Darstellung Institute for Software Technology 12
Parse Tree - Beispiel G: ( {E}, { (, ), num, +, * }, E, ) { } E E + E E E * E E ( E ) E num Ist num + num * num in dieser Sprache?? Institute for Software Technology 13
Parse Tree - Beispiel G: ( {E}, { (, ), num, +, * }, E, { E E + E E E * E E ( E ) E num } ) Institute for Software Technology 14
Parse Tree - Beispiel G: ( {E}, { (, ), num, +, * }, E, { E E + E E E * E E ( E ) E num } ) Institute for Software Technology 15
LL(1) - Allgemeines Left to right / Leftmost derivation Kontextfreie Grammatik mit Einschränkungen Keine Linksrekursion (direkt oder indirekt) L La I Jx und J Iy Keine Linksfaktorisierung F ax und F ay Institute for Software Technology 16
LL(1) - Linksrekursion Direkt L La L b Auflösen L bm M am ε Indirekt I J I z J Iy Auflösen in direkte I Iy I z Institute for Software Technology 17
LL(1) - Linksfaktorisierung Mehrdeutigkeit auflösen F xg F xh Auflösen F xe E G H Institute for Software Technology 18
LL(1) Umformen Äquivalenz muss bestehen bleiben G vor = G nach Überprüfe immer, ob beide Grammatiken die exakt selbe Sprache erzeugen Institute for Software Technology 19
LL(1) - Allgemeines Warum? Einfaches Parsing Nächstes Token muss reichen, um Produktionsregel zu identifizieren 1 Token Look Ahead Wie? Möglich durch Hilfe von Parse-Table Dazu notwendig: FIRST- & FOLLOW-Mengen Institute for Software Technology 20
FIRST & FOLLOW FIRST(α) All jene Terminalsymbole, die an erster Stelle von α vorkommen können (inkl. ε) FOLLOW(A) All jene Terminalsymbole, die DIREKT rechts von Nonterminal A stehen können falls A abschließendes (am weitest rechts stehendes) sein kann, ist $ Element v. FOLLOW(A) Institute for Software Technology 21
FIRST(X) - Regeln Wenn Terminal a an erster Stelle von Non-Terminal A steht, inkludiere a in FIRST(A) FIRST-Menge von Terminal = genau dieses Terminal Beispiel: S AB A a FIRST(S) = FIRST(AB) = B b FIRST(A) = FIRST(a) = a Institute for Software Technology 22
FIRST(X) - Regeln Wenn A ε, dann ist ε in FIRST(A) Wenn A ein Nonterminal ist, und unter anderem folgende Regeln existieren... A BC, B ε, C d dann ist d in FIRST(A) Wenn auch C ε gelten würde, müsste FIRST(A) zusätzlich auch ε enthalten Institute for Software Technology 23
FIRST(X) - Regeln Beispiel (Startsymbol A) A BC B b ε C d ε FIRST(A) = FIRST(BC) = FIRST(B) + FIRST(C) = {b, ε} + {d, ε} = {b, d, ε} (weil ε in FIRST(B)) Institute for Software Technology 24
FOLLOW(X) - Regeln Startsymbol (z.b. S) enthält immer $ $ = Endmarker Falls Regel A abc existiert, ist FIRST(C) in FOLLOW(B) enthalten Ausnahme: ε C kann in diesem Fall ein Terminal oder weitere Non-Terminale darstellen Institute for Software Technology 25
FOLLOW(X) - Regeln Falls die Regeln A abc sowie C ε existieren, so ist JEDES Element aus FOLLOW(A) auch in FOLLOW(B) Institute for Software Technology 26
FOLLOW(X) - Beispiel S ABC FOLLOW(S) = {$} A a FOLLOW(C) = {$} B bb B ε C c FOLLOW(A) = FIRST(B)\ε + FIRST(C) = {b, c} FOLLOW(B) = FIRST(C) = {c} (weil ε in FIRST(B)) Institute for Software Technology 27
Parse-Table Terminal1 Terminal2. TerminalN Nonterminal1 Nonterminal2 NonterminaN Institute for Software Technology 28
Parse-Table - Aufbau Trage Regel A B (wenn B nicht ε) in alle Spalten mit Element x aus FIRST(B) ein Ist ε in FIRST(B), dann trage A B in alle Spalten mit Element y aus FOLLOW(A) ein Kann auch als Überprüfung verwendet werden, ob FIRST/FOLLOW richtig Tabelle muss selbe Sprache parsen wie Grammatik Institute for Software Technology 29
Parse-Table S ABC A ac B bb B ε C c Institute for Software Technology 30
Parse-Table - Beispiel S ABC A ac B bb B ε C c Sets FIRST FOLLOW S a $ A a b, c B b, ε c C c b, c, $ Institute for Software Technology 31
Parse-Table Beispiel 1 S ABC A ac B bb B ε C c Sets FIRST FOLLOW S a $ A a b, c B b, ε c C c b, c, $ a b c $ S S ABC A A ac B B bb B ε C C c Institute for Software Technology 32
Parse-Table Beispiel 2 S ABC A ac B bb B ε C c C ε Sets FIRST FOLLOW S a $ A a b, c, $ B b, ε c, $ C c, ε b, c, $ a b c $ S S ABC A A ac B B bb B ε B ε C C ε C c C ε Institute for Software Technology 33
Stack Parse-Tabelle Parsen S A Input (Forts.) Produktion/ Kommentar $ acc$ S ABC $ CBA acc$ A ac $ CBCa acc$ a matched $ CBC cc$ C c $ CBc cc$ siehe nächste Folie siehe nächste Folie a b c $ S ABC A ac B B bb B ε C siehe nächste Folie C c Institute for Software Technology 34
Parse-Tabelle - Parsen S A Stack (Übertrag) a b c $ S ABC A ac B B bb B ε C Input(Übertrag) C c Produktion/ Kommentar $ CBc cc$ c matched $ CB c$ B ε $ C c$ C c $ c c$ c matched $ $ MATCHED Institute for Software Technology 35
Scala Scala Tutorial bereits durchgeführt Dokumente online zugänglich Beispiele von AB-1 sind gute Übung für AB-P! Institute for Software Technology 36
Fragen? VU Softwareparadigmen Thorsten Ruprechter ruprechter@tugraz.at Institute for Software Technology 37