130 likes | 231 Views
Parsing. Von der Sprache zum Programm. Grundlagen. Begriffe: compile - zusammentragen zusammenstellen parse - (Satz) zerlegen, analysieren, (zer)gliedern; (Wort) grammatisch definieren scan - ... u.a. auch in Versfüße zerlegen. Vom Code zum Programm .
E N D
Parsing Von der Sprache zum Programm
Grundlagen • Begriffe: • compile -zusammentragen zusammenstellen • parse - (Satz) zerlegen, analysieren, (zer)gliedern; (Wort) grammatisch definieren • scan - ... u.a. auch in Versfüße zerlegen
Vom Code zum Programm • Ein Compiler übersetzt ein Programm in Maschinencode. • lexikalische Analyse • syntaktische Analyse • semantische Analyse • Adressvergabe • Befehlsauswahl • Maschinencode-generierung Analyseteil Syntheseteil
...aber wo genau ist der Parser? • ein Beispiel: (in Java) class Konten { double anfangskapital =1000; double zins =11; static double Verzinsung (double betrag) { return betrag*(Zins/100+1); } }
Vom Scanner zum Parser • Anweisung return betrag*(Zins/100+1); besteht aus: • Sonderzeichen * ( + / ) ; • Bezeichnern, wie „Betrag“ und „Zins“ • Schlüsselwort return • Zahlliteral 100 und 1 • Der Scanner reduziert die Zeichen um den sog. „whitespace“ und gruppiert zu Gruppen von Symbolen. • er überprüft: Sind alle Wörter („Tokens“) legale Wörter der Sprache?
Der Parser • Zusammensetzen der Symbolfolge zu Konstrukt der Sprache: • Unser Beispiel return betrag*(Zins/100+1); • Ist es der Form: ReturnSymbolAusdruck Semikolon ? • ReturnSymbol und Semikolon sind ok. • Parser prüft rekursiv:Ausdruck = Bezeichner(„Betrag“), MulOpSysmbol, RundeKlammerAufSymbol, Bezeichner(„Zins“), DivOpSymbol, Zahlliteral(100), PlusOpSymbol, Zahlliteral(1), RundeKlammerZuSysmbol ? • Dies ist offensichtlich der Fall, denn es gilt auch: Ausdruck MulOpSymbol Ausdruck.
Parsing theoretisch 1 • Definition Parsing: Zerlegung • Prozess der Entscheidung, ob eine Folge von Tokens durch die gegebene Grammatik erzeugt werden kann. • Durch rekursive Aufrufe wird ein Zerlegungsbaum oder (parse tree) aufgebaut. • Es werden die Top-Down- und die Bottom-Up-Zerlegung unterschieden. • Die Top-Down-Zerlegung beginnt mit dem Startsymbol der Grammatik,die Bottom-Up-Zerlegung mit dem zu analysierenden Wort der Eingabesprache. • Anhand dieses Baumes wird dann Maschinencode erzeugt.
Parsing theoretisch 2 • Top-Down-Zerlegung:
Parsing theoretisch 3 • Bottom-Up-Zerlegung:
Parsing, theoretisch 4 • Grundsätzlich: Sprache muss einfache Zerlegung durch Compiler ermöglichen. • „Backtracking“ soll vermieden werden. • Strategie: das jeweils nächste Symbol („Token“) im Eingabestrom des Parsers, wie die weitere Zerlegung zu erfolgen hat (lookahead = 1). (kein Backtracking nötig, ein effizienter Parser. • Trennzeichen eingeführen, die das Lokalisieren von Syntaxfehlern erleichtern. • Beispiel: die Sprache Basic: Es gibt ein eindeutiges Schlüsselwort zu Beginn jeder Anweisung.
Parsing: Syntaxbaum • Bild unseres Syntaxbaumes: Return-Anweisung ReturnSymbol Ausdruck ; * Betrag + 1 / Zins 100
Unser Programm in Maschinencode • rekursives Auslesen des Syntaxbaumes, jeder Teilbaum wird zu einem Teil des Maschinencodes:
Vielen Dank • Viel Glück bei der BIT-Klausur! • http://www-li5.ti.uni-mannheim.de/blackboard/vorlesungen/pi2ss03/PI2_6M22-42.pdf • H.-P. Gumm/M. Sommer „Einführung in die Informatik“