Compilerbau WS06-07 Benjamin Brink Saina Bayat. Ziel des Praktikums Die Implementierung eines kleinen Compilers für eine Teilmenge der Programmiersprache.

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping (ORM). Objektmodell - Datenbankmodell.
Advertisements

Aufbau, Abfrage, Analyse von Sprachdatenbanken
Vorbereitung: struct knoten { int x; struct knoten *l, *r; } *b, *bh, **bp; b: Zeiger auf Wurzel bh: Hilfszeiger bp: Zeiger auf Zeiger auf knoten b bp.
Eulerscher Polyedersatz
Klassen - Verkettete Liste -
Kapitel 9: Graphdurchlauf
Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Agenda Sitzung 2 für den Programmaufbau
1 low:=low-Q 2 high:=high-Q 2 low:=low-Q 1 high:=high-Q 1.
Einführung in JavaScript II
Parser generieren Yet Another Compiler – Compiler YACC.
Sortieren mit Binären Bäumen
Java: Dynamische Datentypen
Aufbau, Abfrage, Analyse von Sprachdatenbanken ErstellungAnalyse Abfrage Digitale Zeitsignale akustisch, artikulatorisch Etikettieren Verknüpfung mit Symbolen.
Aufbau, Abfrage, Analyse von Sprachdatenbanken ErstellungAnalyse Abfrage Digitale Zeitsignale akustisch, artikulatorisch Etikettieren Verknüpfung mit Symbolen.
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Das Maßproblem von Klee
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
WS 06/07 Algorithmentheorie 01 - Einleitung Prof. Dr. Th. Ottmann Tobias Lauer.
Union-Find-Strukturen
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Zusammenfassung Vorwoche
Die Methode public Knoten einfuegenVor (Datenelement dNeu, Datenelement dVergleich) public Knoten einfuegenVor(Datenelement dNeu, Datenelement dVergleich){
A. Zündorf, SE Group Reverse Engineering K2 1 Ziele Heute Compilerbau Nachlese Ausnutzung von Laufzeittypinformation.
Matthias Spohrer · TU München 8. Präsenzveranstaltung – TU Stammgelände Innenstadt Nachqualifizierungskurs für Informatiklehrkräfte.
Modulare Programmierung
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Kapitel 10: Graphalgorithmen
Struktogramme IF-ELSE FOR – Schleife
Grundkurs Theoretische Informatik, Folie 7.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 7 Gottfried Vossen Kurt-Ulrich Witt.
Programmiersprachen II Integration verschiedener Datenstrukturen
Einfach verkettete Listen
Visualisierung funktionaler Programme
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursive Funktionen (Fakultät)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Informatik 1 Übung 4.
Informatik Objekte und Klassen 1. Objektorientiertes Modellieren und Programmieren 1.1 Objekte und Klassen.
Einführung in das Wissenschaftliche Arbeiten Andreas Hechenblaickner Programmiersprache Eiffel
Was mich ursprünglich von Perl überzeugt hat. Gegeben ist eine Textdatei, deren Größe unbekannt ist. Sie ist jedoch so klein, daß sie komplett in den Speicher.
Algorithmen und Datenstrukturen SS 2005
Vorlesung 5. #include double fv(double x) { return sin(x); } int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; for(i=1,sum=0.0,del = (b-a)/N;i
Pendulum.c Thomas Baumgartner, Mat.nr Alexander Gross, Mat.nr
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Wuppertaler Stadtmeisterschaften 2009 Jugend / Einzel CBC / PR Ausrichter am 07./
1 Lösung Hausaufgabe 5-1 Seite 1 #!perl -w # Datei Oeffnen und Variablen initialisieren $infile = "daten5-3.txt"; $im=$iw=$sm=$sw=0; open (IN,$infile)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Anmerkung des Autor Diese Präsentation ist mit Powerpoint für MacOS erstellt. Leider ist sie nicht vollständig mit Powerpoint für Windows kompatibel.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Die allgemeine Liste.
Rekursion – Speicherverwaltung
Zwei Denkansätze zur Klasse Schlange
Heap Operationen Folien bitte als Vollbild-Bildschirmpräsentation (Taste F5) betrachten! Vorlesung Algorithmen und Datenstrukturen, WS10/11, C. Eckert.
1. Die rekursive Datenstruktur Liste 1
Heapsort-Algorithmus
 Präsentation transkript:

Compilerbau WS06-07 Benjamin Brink Saina Bayat

Ziel des Praktikums Die Implementierung eines kleinen Compilers für eine Teilmenge der Programmiersprache C++ unter Linux.

SD Unparser für LC++ - Akzeptiert LC++ - LC++ - {if, else, while, +,*,sin } -ganze Zahlen : {0,…,9} -Variablen: {a,…,z,A,…,Z} -Zuweisungen - Unveränderte Ausgabe

Beispiel 1 if (x < y) { 2x = x*y; 3 } else { 4x = sin(x+y); 5 }

Scanner / Parser - SD-Unparser: besteht aus Scanner/Parser - Scanner: - von Flex generiert - lexikographische Analyse - akzeptiert Wörter - erstellt Liste von Tokens

- Parser: - von Bison generiert - "versteht" LC++ - syntaktische Analyse Parser

Scanner im Detail scanner.l: 1 whitespace [ \t\n]+ 2 symbol[a-z]+ 3 number[0-9]+ 4 5 {whitespace} 6 7 "if"return IF; 8 "else"return ELSE; 9 "while"return WHILE; 10 "sin"return SIN; {symbol} { yylval.a = strdup(yytext); return SYMBOL; } 13 {number} { yylval.a = strdup(yytext); return NUMBER; } "=="return EQ; 16 "!="return NEQ; 17 " ="return GEQ; 19.return yytext[0];

Beispiel 1 if (x < y) { 2 x = = x*y; 3 } else { 4 x = sin(x+y) 5 }

Ausgabe des Scanners 1 IF '(' SYMBOL '<' SYMBOL ')' '{' 2 SYMBOL '=' '=' SYMBOL '*'SYMBOL '; ' 3 '}' ELSE '{' 4 SYMBOL '=' SIN '(' SYMBOL '+'SYMBOL ')' 5 '}'

Parser im Detail Parser im Detail parser.y: 1 %token SYMBOL IF ELSE WHILE SIN EQ NEQ LEQ GEQ 2 %left '+' 3 %left '*' 4 code: sequence_of_statements 5 sequence_of_statements: statement 6| statement sequence_of_statements 7 statement: assignment 8| control_structure 9 assignment: SYMBOL '=' expression ';'

Parser im Detail 10 control_structure: IF '(' comparism ')' '{' sequence_of_statements '}' 12 | IF '(' comparism ')' '{' sequence_of_statements '}' 13ELSE '{' sequence_of_statements '}' 14 | WHILE '(' comparism ')' '{' sequence_of_statements '}' 15 comparism: expression EQ expression 16 | expression NEQ expression 17 | expression ' ' expression 19 | expression LEQ expression 20 | expression GEQ expression 21 expression: expression '*' expression 22 | expression '+' expression 23 | SIN '(' expression ')' 24 | SYMBOL 25 | '(' expression ')'

Ausgabefunktion 1 static void print_with_tabs(char *s) 2 { 3char *p, *nl; 4int t, tablevel = 0; 5 6for (p=s; *p;) { 7nl = strchr(p, '\n'); 8if (nl) { 9*nl = 0; 10if (strchr(p, '}')) 11tablevel--; 12for (t=0; t<tablevel; t++) 13printf(TAB); 14printf("%s\n",p); 15if (strchr(p, '{')) 16tablevel++; 17p = nl+1; 18} 19 } 20 }

Sdcodelist - Generierung semantisch äquivalenter Form - Zerlegung der Ausdrucke in atomare Einheiten - Deklaration der neuer Variablen vi - Zuordnung der atomaren Teile zu den vi

Beispiel double v1,...,v7; if (x < y) { v1 = x; v2 = y; v3 = v1 * v2; x = v3; } else { v4 = x; v5 = y; v6 = v4 + v5; v7 = sin(v6); x = v7; } 1 if (x < y) { 2x = x*y; 3 } else { 4x =sin(x+y); 5 }

Implementierung assignment: SYMBOL '=' expression ';' sprintf($$.a, "%s%s = v%d;\n",$3.a,$1.a, $3.j); expression: expression '*' expression $$.j=i++; sprintf($$.a, "%s%sv%d = v%d * v%d;\n",$1.a,$3.a,$$.j,$1.j,$3.j); | expression '+' expression $$.j=i++; sprintf($$.a, "%s%sv%d = v%d + v%d;\n",$1.a,$3.a,$$.j,$1.j,$3.j); | SIN '(' expression ')' $$.j=i++; sprintf($$.a, "%sv%d = sin(v%d);\n",$3.a,$$.j,$3.j); | SYMBOL $$.j = i++; sprintf($$.a, "v%d = %s;\n", $$.j, $1.a); | NUMBER $$.j = i++; sprintf($$.a, "v%d = %s;\n", $$.j, $1.a);

Sdtlcode - Erweiterung der Codelist - Berechnung 1. partieller Ableitung der vi - Speicherung in Hilfsvariablen dvi

Beispiel x = 9*y + sin(z); double v1,...,v6, dv1,...,dv6; dv1 = 0; v1 = 9; dv2 = dy; v2 = y; dv3 = dv1 * v2 + v1 * dv2; v3 = v1 * v2; dv4 = dz; v4 = z; dv5 = dv4 * cos(v4); v5 = sin(v4); dv6 = dv3 + dv5; v6 = v3 + v5; dx = dv6; x = v6;

AST basiertet Ansatz Abstrakter Syntaxbaum - AST ist Datenstruktur - Parser generiert AST - Ausgabe mit print(), draw()

AST 1 class ast_vertex { 2 public: 3 int type; 4 int idx; 5 list sons; 6 char* symbol; 7 [...] 8 void print(FILE*,int); 9 void draw(FILE*); }

Ausschnitt parser.y expression: expression '*' expression { $$=new ast_vertex; $$->type=MUL_EXPRESSION_ASTV; $$->sons.push_back($1); $$->sons.push_back($3); $$->idx = ++i; }

Beispiel x= y * z * sin(z);

SD/AST Unterschiede: - Implementierungsaufwand - Lesbarkeit - Erweiterbarkeit