Parser - Verfahren: Rekursiver Abstieg

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Vorlesung Compilertechnik Sommersemester 2008
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
9. Syntaxdiagramme und Backus-Naur-Form (BNF)
Suche in Texten (Stringsuche )
Imperative Programmierung
Kapitel 4 Syntaktische Analyse: LR Parsing.
Parser generieren Yet Another Compiler – Compiler YACC.
HTML - Einführung Richard Göbel.
FH-Hof Einbindung von JavaScript Anweisungen
Threads Richard Göbel.
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
Suchbäume Richard Göbel.
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
FH-Hof Grammatiken Richard Göbel. FH-Hof Begriffe Eine Grammatik definiert die Struktur (Syntax) einer Zeichenkette Eine Grammatik definiert nicht die.
Java: Dynamische Datentypen
Listen Richard Göbel.
Sortierverfahren Richard Göbel.
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Indirekte Adressierung
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
FH-Hof Alternative Darstellungsformen für Grammatiken Richard Göbel.
Parser für CH3-Sprachen
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
FH-Hof Optimierungsverfahren für kombinatorische Probleme Richard Göbel.
Motivation Richard Göbel.
Formale Sprachen – Mächtigkeit von Maschinenmodellen
Java: Referenzen und Zeichenketten
Baumstrukturen Richard Göbel.
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Programmierung 1 - Repetitorium
Einführung in die Programmierung Anweisungen und Datentypen
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Von der Sprache zum Programm
Rekursion Richard Göbel.
Template Pattern Richard Göbel.
FH-Hof HTML - Einführung Richard Göbel. FH-Hof Komponenten des World Wide Webs WWW Browser HyperText Transfer Protocol (HTTP) via Internet WWW Server.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
Grundkonzepte Java - Klassendefinition
Programme dokumentieren mit JavaDoc
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Grundkonzepte des Programmierens (mit ActionScript)
Purga - Scriptengine Ein Einblick.
Dieser nicht Fehler finden Algorithmus enthält einfach einen gravierenden welcher zu ist.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
PHP: Operatoren und Kontrollstrukturen
Variablen. var meineZahl:Number = 7; meineZahl 7 Name TypWert = Zuweisung von Variablen.
Informatik Formale Sprachen 1.2 Grammatiken formaler Sprachen
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Berechenbarkeit Klaus Becker Berechenbarkeit.
7. Formale Sprachen und Grammatiken
1 Tagesüberblick 5 Lösung Hausaufgabe/Fragen Assoziative Felder Funktionen zu Variablenbehandlung.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Delphi Chars und Strings
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Ein- und Ausgabe in Java Packet: java.io
Variablen und Datentypen
Syntaxdiagramme.
 Präsentation transkript:

Parser - Verfahren: Rekursiver Abstieg Richard Göbel

Inhalt Konstruktion eines Parsers aus der BNF Scanner

Beispiel Grammatik <tasks> ::= ´(´ <activity> {, <activity>} ´)´ <activity> ::= <name>: ( (<duration> <resources> ) | <tasks> ) <resources> ::= '[' <name> {, <name> } ']' <name> ::= <letter> { <letter> | <digit> | <special> } <duration> ::= <digit> { <digit> } <letter> ::= a | b | . . . | z | A | B | . . . | Z <digit> ::= 0 | 1 | 2 | . . . | 9 <special> ::= _ | . | /

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

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.

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

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

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

Backus-Naur-Form - Abbildung von Wiederholungen while ( . . . ) { /* hier w einlesen */ }

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

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.

Backus-Naur-Form - Beispiel: Mehrdeutige Grammatik <date> ::= [ [ <day> ] <month> ] <year> <day> ::= <digit> <digit> . <month> ::= <digit> <digit> . <year> ::= <digit> <digit> <digit> <digit>  Mehrdeutigkeiten lassen sich durch zusätzlich Terminalsymbole beseitigen.

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

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

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_1 Zeichenkette : Sonderzeichen Vorbereitung Zeichenkette 70 Zahl [ Sonderzeichen Goebel Zeichenkette . . . . . .

Grammatik für einen Tokenizer - Beispiel: Activities <tasks> ::= ´(´ <activity> {, <activity>} ´)´ <activity> ::= <name>: ( <duration> <resources> ) | <tasks> <resources> ::= '[' <name> {, <name> } ']' <name> ::= <zeichenkette> <duration> ::= <zahl>

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) {

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();

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