Parsing

13
Parsing Parsing Von der Sprache zum Von der Sprache zum Programm Programm

description

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. - PowerPoint PPT Presentation

Transcript of Parsing

Page 1: Parsing

ParsingParsing

Von der Sprache zum Von der Sprache zum ProgrammProgramm

Page 2: Parsing

GrundlagenGrundlagen

Begriffe:Begriffe: compilecompile - - zusammentragen zusammentragen

zusammenstellen zusammenstellen parseparse - - (Satz)(Satz) zerlegen, analysieren, zerlegen, analysieren,

(zer)gliedern; (zer)gliedern; (Wort)(Wort) grammatisch grammatisch definierendefinieren

scanscan - ... u.a. auch in Versfüße zerlegen - ... u.a. auch in Versfüße zerlegen

Page 3: Parsing

Vom Code zum Vom Code zum ProgrammProgramm

Ein Compiler übersetzt ein Programm in Ein Compiler übersetzt ein Programm in Maschinencode.Maschinencode.

lexikalische Analyselexikalische Analyse syntaktische Analysesyntaktische Analyse semantische Analysesemantische Analyse AdressvergabeAdressvergabe BefehlsauswahlBefehlsauswahl Maschinencode-Maschinencode-

generierunggenerierung

Analyseteil

Syntheseteil

Page 4: Parsing

...aber wo genau ist der ...aber wo genau ist der Parser?Parser?

ein Beispiel: (in Java)ein Beispiel: (in Java)class Konten {

double anfangskapital =1000;double zins =11;

static double Verzinsung (double betrag) {

return betrag*(Zins/100+1);

}

}

Page 5: Parsing

Vom Scanner zum ParserVom 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?

Page 6: Parsing

Der ParserDer Parser Zusammensetzen der Symbolfolge zu Konstrukt der Zusammensetzen der Symbolfolge zu Konstrukt der

Sprache:Sprache: Unser Beispiel Unser Beispiel return betrag*(Zins/100+1); Ist es der Form: ReturnSymbol Ausdruck 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.

Page 7: Parsing

Parsing theoretisch 1Parsing theoretisch 1 Definition Parsing: Zerlegung Definition Parsing: Zerlegung Prozess der Entscheidung, ob eine Folge von Tokens Prozess der Entscheidung, ob eine Folge von Tokens

durch die gegebene Grammatik erzeugt werden kann.durch die gegebene Grammatik erzeugt werden kann. Durch rekursive Aufrufe wird ein Zerlegungsbaum Durch rekursive Aufrufe wird ein Zerlegungsbaum

oder (parse tree) aufgebaut.oder (parse tree) aufgebaut. Es werden die Es werden die Top-Down- Top-Down- und die und die Bottom-Up-Bottom-Up-

ZerlegunZerlegung unterschieden.g unterschieden. Die Top-Down-Zerlegung beginnt mit dem Die Top-Down-Zerlegung beginnt mit dem

Startsymbol der Grammatik,Startsymbol der Grammatik,die Bottom-Up-Zerlegung mit dem zu analysierenden die Bottom-Up-Zerlegung mit dem zu analysierenden Wort der Eingabesprache.Wort der Eingabesprache.

Anhand dieses Baumes wird dann Maschinencode Anhand dieses Baumes wird dann Maschinencode erzeugt.erzeugt.

Page 8: Parsing

Parsing theoretisch 2Parsing theoretisch 2

Top-Down-Zerlegung:Top-Down-Zerlegung:

Page 9: Parsing

Parsing theoretisch 3Parsing theoretisch 3

Bottom-Up-Zerlegung:Bottom-Up-Zerlegung:

Page 10: Parsing

Parsing, theoretisch 4Parsing, 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.

Page 11: Parsing

Parsing: SyntaxbaumParsing: Syntaxbaum Bild unseres Syntaxbaumes:Bild unseres Syntaxbaumes:

Return-Anweisung

Ausdruck

*

Betrag +

1

100

/

Zins

ReturnSymbol

;

Page 12: Parsing

Unser Programm in Unser Programm in MaschinencodeMaschinencode

rekursives Auslesen des Syntaxbaumes, jeder rekursives Auslesen des Syntaxbaumes, jeder Teilbaum wird zu einem Teil des Maschinencodes:Teilbaum wird zu einem Teil des Maschinencodes:

Method double Verzinsung(double)

00 dload_1dload_1 <Lade double Betrag><Lade double Betrag>

11 aload_0aload_0 <Adresse der eigenen Klasse><Adresse der eigenen Klasse>

22 getfield #7getfield #7 <Lade Feld double zins><Lade Feld double zins>

55 ldc2_w #8ldc2_w #8 <Lade das Literal double 100.0><Lade das Literal double 100.0>

88 ddivddiv <Dividiere double><Dividiere double>

99 dconst_1dconst_1 Lade das Literal double 1.0>Lade das Literal double 1.0>

1010 dadddadd <Addiere double><Addiere double>

1111 dmuldmul <Multipliziere Double><Multipliziere Double>

1212 dreturndreturn <Ergebnis als double zurückgeben><Ergebnis als double zurückgeben>

Page 13: Parsing

Vielen DankVielen Dank

Viel Glück bei der BIT-Klausur!Viel Glück bei der BIT-Klausur! http://www-li5.ti.uni-mannheim.de/blackboard/vorlesungehttp://www-li5.ti.uni-mannheim.de/blackboard/vorlesunge

n/pi2ss03/PI2_6M22-42.pdfn/pi2ss03/PI2_6M22-42.pdf H.-P. Gumm/M. Sommer „Einführung in die H.-P. Gumm/M. Sommer „Einführung in die

Informatik“Informatik“