Parser generieren Yet Another Compiler – Compiler YACC.

Slides:



Advertisements
Ähnliche Präsentationen
Vorlesung Compilertechnik Sommersemester 2008
Advertisements

Kontextfreie Grammatiken
Informatik 12 | DAES Compilerbau Wintersemester 2010 / 2011 Dr. Heiko Falk Technische Universität Dortmund Lehrstuhl Informatik 12 Entwurfsautomatisierung.
Technische Universität Dortmund
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
Gliederung 1. Grundlagen der Bottom-Up-Syntaxanalyse
Martin Schneider, Folien von Prof. H.-P. Gumm
7. Automaten Ein Automat ist ein Sechstupel A= (I, O, Q, , q0, F).
Institut für Informatik Abt. Intelligente Systeme
8. Formale Sprachen und Grammatiken
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Lösung 7.1 Syntax und Semantik
Imperative Programmierung -Entwicklungswerkzeuge
Imperative Programmierung
MS Office-Paket: Access
Kapitel 4 Syntaktische Analyse: LR Parsing.
Parser - Verfahren: Rekursiver Abstieg
Indirekte Adressierung
Anfragesprachen – Dipl. Ing. Ulrich Borchert / FH Merseburg1/7 Datenbanken werden als Anhäufung von Werten eines Wertebereiches aufgefasst und Datenbankabfragen.
Java- Syntax.
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (12 – Kellerautomaten, PDA) Prof. Dr. Th. Ottmann.
HTML - Eine erste Annäherung
M a r c – o l i v e r p a h l Informatik II – Kapitel 18 Übersetzung Zusammenfassung des Kapitel 18 Küchlin, Weber, Vorversion Einführung in die Informatik,
Prolog Grundkurs WS 98/99 Christof Rumpf
XHTML 1.1 C. Nimz Abstrakte Module XHTML 1.1 C. Nimz Was ist ein abstraktes Modul? Definition eines XHTML-Moduls in spezieller leichter.
Modularization of XHTML™
Agenda Motivation Formale Sprachen Compiler Compilerentwicklung
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
A. Zündorf, SE Group Reverse Engineering K2 1 Ziele Heute Compilerbau Nachlese Ausnutzung von Laufzeittypinformation.
A. Zündorf, SE Group Reverse Engineering K2 1 Ziele Heute Compilerbau Nachlese Ausnutzung von Laufzeittypinformation.
Programmierung 1 - Repetitorium
Der C-Präprozessor EDV1 - 04Präprozessor.
Einführung in Visual C++
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
Der C-Präprozessor 08-CPräprozessor.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Von der Sprache zum Programm
Titelmasterformat durch Klicken bearbeiten Formatvorlage des Untertitelmasters durch Klicken bearbeiten Die formalen Sprachen bei ETAP Teil II.
Einführung in die Programmiersprache C 1
Webseitengestaltung.
Dateien Datei = File (engl.) Mögliche Inhalte einer Datei
Syntaxanalyse Bottom-Up und LR(0)
Wird ganz am Anfang der HTML-Datei geschrieben Doctype html public bedeutet, dass man sich auf die Öffentlichkeit der html-dtd bezieht Html ist die meist.
Wohlgeformtheit und Gültigkeit Grundlagen der Datenmodellierung Anke Jackschina.
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
Städtisches Gymnasium Beverungen Friedel Berlage
Beispiele: KFG 2.Teil Beispiel 1: Sei G eine Grammatik mit den folgenden Regeln: S  Ac | Bd A  aAb | ab B  aBbb | abb Definieren Sie.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Arne Vater Wintersemester 2006/ Vorlesung
Uwe Habermann Venelina Jordanova Was ist neu in VFX 15?
CSS Cascading Style Sheets
Software Engineering Strukturierte Analyse
Institut für Softwarewissenschaft – Universität WienP.Brezany 1 Beispiele (Frist: ) Beispiel 1: Sei  = {a, b} ein Alphabet und Q = {q 0, q 1 } eine.
Das Java-Hamster-Modell
7. Formale Sprachen und Grammatiken
Inhalt Einordnung und Funktion der lexikalische Analyse Grundlagen
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
GRUNDBEGRIFFE.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Tabellengesteuerte Verfahren
Implementieren von Klassen
 Präsentation transkript:

Parser generieren Yet Another Compiler – Compiler YACC

generiert die C-Programme, die den Eingabetext analysieren und bearbeiten; die Analyse betrifft die Zeichen, aus denen der Text besteht.

YACC

Um einen Übersetzer für eine bestimmte Eingabe (Eingabesprache) zu konstruieren, müssen Sie u.a. Werkzeuge für folgende Aufgaben bereitstellen: eine Funktion, die die Eingabe, Zeichen für Zeichen, einliest und in bestimmte Einheiten (Tokens) zerlegt (Scanner) eine Funktion, die die Struktur der Eingabeeinheiten erkennt und entsprechende Aktionen ausführt, wenn eine bestimmte Struktur auftritt (Parser) eine Funktion, die Fehler in der Eingabe behandelt

Programmaufruf: yacc [-schalter...] datei v zusätzlich zum C-Programm y.tab.c, gibt yacc in der Datei y.output eine Beschreibung der Übergangs-Tabellen des Parsers (Parsing- Tabellen) aus. d es wird eine Datei y.tab.h erstellt, die #define- Anweisungen enthält datei Name der Datei, in der das yacc-Quell- Programm steht

Wie arbeitet yacc ? yacc erwartet als Eingabe ein yacc-Quell-Programm, das in einem bestimmten Format geschrieben sein muß. Der Benutzer legt im yacc-Quell-Programm fest: die Struktur der Eingabe(-sprache), d.h. die Grammatik, die der Parser erkennen soll, Aktionen, die ausgeführt werden, wenn der Parser eine entsprechende Struktur findet, eine Funktion yylex, die die Eingabezeichen liest, nach Token vorgruppiert und die Strukturbestimmung vorbereitet. yylex führt also die lexikalische Analyse aus.

Wie arbeitet yacc ? (2) yacc erstellt aus diesen Angaben ein C-Programm, in dem ein Parser ( yyparse ) definiert wird. Genauer gesagt, erzeugt yacc die Übergangstabellen für einen Stackautomaten, der nach einem LR(1)-Parsing-Algorithmus arbeitet. Eingabe- einheiten werden solange in dem Stack abgespeichert, bis sie eine syntaktische Struktur bilden. Die Eingaben, die der Struktur angehören, werden aus dem Stack geholt und die Struktur wird abgespeichert.

Wie arbeitet yacc ? (3) Die Klasse der Grammatiken, die yacc bearbeiten kann, ist eine Teilmenge der Chomsky-Typ 2 Grammatiken (die LALR(1)-Grammatiken). Die Grammatiken dürfen bestimmte Mehrdeutigkeiten enthalten; mit Präzedenzregeln können sie Mehrdeutigkeiten auflösen. yacc schreibt das C-Programm, in dem die Funktion yyparse definiert wird, in die Datei y.tab.c. yyparse ist eine integer- Funktion, die die Funktion yylex jedes Mal aufruft, wenn die nächste Eingabeeinheit eingelesen werden muß. yyparse hat den return-Wert 0, wenn die Eingabe grammati- kalisch richtig beendet und vom Parser akzeptiert wird. Falls ein Fehler in der Eingabe auftritt und nicht erfolgreich behoben werden kann, dann hat yyparse den return-Wert 1.

Beispiel: $ yacc grammatik.y $ lex regeln.l $ cc y.tab.c -ly -lln $ a.out <eingabe $

Format eines yacc-Quell-Programms [Deklaration…] % Regel… [%] [Programm…] Deklarationen und Regeln müssen im entsprechenden Format geschrieben sein.

Im Programmteil können Sie C-Funktionen definieren, die im yacc-Programm aufgerufen werden (z.B. Aktionen), die Teilfunktionen eines Übersetzers sind (z.B. yylex), die als Hauptfunktion fungieren sollen (z.B. main).

Deklarationen in yacc-Quell-Programmen: %{ text %} %token NAME [nummer] %start symbol %left TOKEN… %right TOKEN… %nonassoc TOKEN… %type symbol… %union { unionkomponente }

Regeln in yacc-Quell-Programmen symbol : rumpf ; oder symbol : rumpf1 | rumpf2... | rumpfn ;

Beispiel: %token JAHR %start datum % datum : tag. zmonat. JAHR | tag. wmonat JAHR ; tag : 1 | 2... | 3 1 ; zmonat : 1 | 2... | 1 2 ; wmonat : J a n u a r | F e b r u a r |...

Aktionen in yacc-Quell-Programmen: Werte zurückgeben, von yylex Werte für Terminalsymbole entgegenentnehmen, untereinander kommunizieren, Ein- und Ausgabe ausführen, andere Funktionen aufrufen, externe Vektoren und Variablen ändern. Eine Aktion muß in { } geschrieben werden, also { C–Programmteil }

Wie arbeitet der Parser ? Das Hauptprogramm ruft die Funktion yyparse ( ) auf, die Funktion yyparse ruft die Funktion yylex auf.