Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

FH-Hof Parser - Verfahren: Rekursiver Abstieg Richard Göbel.

Ähnliche Präsentationen


Präsentation zum Thema: "FH-Hof Parser - Verfahren: Rekursiver Abstieg Richard Göbel."—  Präsentation transkript:

1 FH-Hof Parser - Verfahren: Rekursiver Abstieg Richard Göbel

2 FH-Hof Inhalt Konstruktion eines Parsers aus der BNF Scanner

3 FH-Hof Beispiel Grammatik ::= ´(´ {, } ´)´ ::= : ( ( ) | ) ::= '[' {, } ']' ::= { | | } ::= { } ::= a | b |... | z | A | B |... | Z ::= 0 | 1 | 2 |... | 9 ::= _ |. | /

4 FH-Hof Backus-Naur-Form - Beispiel Text (Datenbanksysteme_1: (Vorlesung_1: (Vorbereitung: 70 [Goebel], Durchfuehrung:90 [Goebel], Nachbereitung:40 [Goebel]), Vorlesung_2: (Vorbereitung: 70 [Goebel], Durchfuehrung:90 [Goebel], Nachbereitung:40 [Goebel]), Vorlesung_3: (Vorbereitung: 70 [Goebel], Durchfuehrung:90 [Goebel], Nachbereitung:40 [Goebel])), Symbolische_Verfahren_1:...

5 FH-Hof Backus-Naur-Form – Ansatz für die Abbildung Erzeuge für jedes Nichtterminalsymbol eine Funktion Bilde die Regel eines Nichtterminalsymbols auf den Rumpf der Funktion ab. Erzeuge aus den BNF-Symbolen entsprechende Kontrollstrukturen.

6 FH-Hof Backus-Naur-Form – Beispiel für die Abbildung ( Vorlesung_1: (Vorbereitung: 70 [ Goebel ], Durchfuehrung: 90 [ Goebel ], Nachbereitung: 40 [ Goebel ] ) parseName() parseRessources() parseDuration() parseActivity() parseTasks() parseActivity() parseTasks()

7 FH-Hof Backus-Naur-Form - Abbildung von Alternativen Alternativen: v1 | v2 |... | vn if (... ) { /* hier v1 einlesen */ }... else if (... ) { /* hier vn einlesen*/ } else { /* Fehler */ }

8 FH-Hof Backus-Naur-Form - Abbildung von Optionen Option: [w] if (... ) { /* hier w einlesen */ }

9 FH-Hof Backus-Naur-Form - Abbildung von Wiederholungen Wiederholung: { w } while (... ) { /* hier w einlesen */ }

10 FH-Hof Backus-Naur-Form - Steuerung der Kontrollstrukturen Bedingung überprüft das nächste Zeichen in der Eingabe Das nächste Zeichen sollte immer bereits zur Verfügung stehen: am Anfang einer Funktion am Anfang einer Kontrollstruktur Für diesen Ansatz muss die Grammatik eindeutig sein

11 FH-Hof Backus-Naur-Form - Eindeutigkeit Alle Alternativen müssen mit unterschiedlichen Terminalsymbolen beginnen. Bei einer Option oder einer Wiederholung muss der geklammerte Ausdruck v mit anderen Terminalsymbolen beginnen als der folgende Ausdruck w Optionen oder Wiederholungen am Ende einer Regel: Alle Regeln mit dem zugehörigen Nichtterminalsymbol untersuchen Die Zeichenkette nach dem Nichtterminal muss mit einem anderen Terminalsymbol als die Zeichenkette aus der Option oder der Wiederholung beginnen.

12 FH-Hof Backus-Naur-Form - Beispiel: Mehrdeutige Grammatik ::= [ [ ] ] ::=. ::= Mehrdeutigkeiten lassen sich durch zusätzlich Terminalsymbole beseitigen.

13 FH-Hof Parser- Tokenizer Aufgabe des Tokenizer : liest Sequenzen von Zeichen (z.B. Namen, Zeichenketten) als Symbole ein Überspringt beliebige Sequenzen von White Space Character (z.B. Leerzeichen, Tabs) als Trennsymbole überspringt Kommentare...

14 FH-Hof Aufgabe eines Tokenizer Lesen eines Token: Zahl Zeichenkette als Name Sonderzeichen Überspringen von so genannten White Space Character (Leerzeichen, Tabulator, Zeilenendezeichen,...) Überspringen von Kommentaren Andere Bezeichnungen: Scanner, lexikographische Analyse,...

15 FH-Hof Lesen einer Zeichenkette mit einem Tokenizer (Vorlesung_1: // Dies ist ein Kommentar (Vorbereitung: 70 [Goebel], Durchfuehrung: 90 [Goebel], Nachbereitung: 40 [Goebel]) Token (Symbol)Typ (Sonderzeichen Vorlesung_1Zeichenkette :Sonderzeichen (Sonderzeichen VorbereitungZeichenkette :Sonderzeichen 70Zahl [Sonderzeichen GoebelZeichenkette......

16 FH-Hof Grammatik für einen Tokenizer - Beispiel: Activities ::= ´(´ {, } ´)´ ::= : ( ) | ::= '[' {, } ']' ::=

17 FH-Hof Stream Tokenizer in Java - Lesen von Token tok = new StreamTokenizer(new FileReader(filename)); tok.nextToken(); if (tok.ttype == StreamTokenizer.TT_WORD) {... tok.sval... } // tok.sval: String else if (tok.ttype == StreamTokenizer.TT_NUMBER) {... tok.nval... } // tok.nval: double else if (tok.ttype == '[') {... } else if (tok.ttype == StreamTokenizer. TT_EOF) {... }

18 FH-Hof Stream Tokenizer in Java - Konfiguration tok.resetSyntax(); tok.slashSlashComments(true); tok.slashStarComments(true); tok.wordChars('a','z'); tok.wordChars('A','Z'); tok.wordChars('0','9'); tok.wordChars('_','_');... tok.whitespaceChars(' ',' '); tok.whitespaceChars('\n', '\n');... tok.parseNumbers();

19 FH-Hof Stream Tokenizer in Java - Weitere Möglichkeiten lineno() liefert die aktuelle Zeilennummer commentChar(int c) ermöglicht ein eigenes Kommentarzeichen noch weitere Möglichkeiten: siehe Dokumentation


Herunterladen ppt "FH-Hof Parser - Verfahren: Rekursiver Abstieg Richard Göbel."

Ähnliche Präsentationen


Google-Anzeigen