• Keine Ergebnisse gefunden

Praktikum Compilerbau

N/A
N/A
Protected

Academic year: 2022

Aktie "Praktikum Compilerbau"

Copied!
11
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktikum Compilerbau

Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Jürgen Graf

Lehrstuhl für Programmierparadigmen Universität Karlsruhe (TH)

22. April 2009

(2)

Gliederung

1 Begrüßung

2 Organisatorisches

3 Aufgabe

4 Bis zum nächsten Treffen

(3)

Begrüßung

Praktikum Compilerbau

Willkommen am Lehrstuhl für Programmierparadigmen Die Betreuer:

Matthias Braunbraun@ipd.info.uni-karlsruhe.de Jürgen Graf grafj@ipd.info.uni-karlsruhe.de Vorraussetzungen:

Grundlegende Kenntnisse ueber Parsingtechniken und semantische Analyse (Vorlesung Sprachtechnologie und Compiler 1)

Gute Programmierkenntnisse in C/C++ ODER Java.

Praktikum: 3 SWS, kann in Diplomprüfung eingebracht werden Jeden Mittwoch um 14h: Treffen im Raum 207

(4)

Organisatorisches

Gruppeneinteilung & Infrastruktur

Geplant sind 4 Gruppen a 4-5 Personen.

Jede Gruppe erhält einen gemeinsamen Account

Einige Arbeitsplätze stehen im Erdgeschoß zur Verfügung SSH Zugang ist ohne VPN möglich, AFS nur mit VPN Bei uns läuft Linux (Ubuntu, SuSE)

Es gibt 2 Wikis und eine normale Webseite

Offizielle Seite:http://pp.info.uni-karlsruhe.de/lehre/

SS2009/compprakt/

Praktikum spezifisches Wiki:http://pp.info.uni-karlsruhe.

de/lehre/SS2009/compprakt/wiki/

Lehrstuhl Wiki (Infrastruktur):

http://pp.info.uni-karlsruhe.de/wiki/

(5)

Aufgabe

Aufgabe

Erstellen eines Compilers für die Sprache MiniJava

Zwischencodeerzeugung, Optimierungen, Codegenerierung MiniJava→ Firm→ Java Bytecode

Gearbeitet wird in Gruppen a 4-5 Personen

Bei Abschluß einer größeren Phase wird ein Dokument erstellt Am Ende des Praktikums stellt jede Gruppe kurz ihr Werk vor

(6)

Aufgabe

Details

Der Compiler kann wahlweise in Java oder C geschrieben werden.

Die geplanten Phasen bestehen aus:

Scannerspezifikation (Eingabe für Generator) Parserspezifikation (Eingabe für Generator) abstrakte Syntax/Baumaufbau

Symboltabelle

attributierte Grammatik zur Typprüfung elementare Programmanalysen/Optimierungen Codegenerierung

(7)

Aufgabe

MiniJava

Untermenge von Java

→ Kann mitjavac übersetzt werden→ einfaches Testen Objektorientiert

Enthält: Methoden, Attribute, Parameter, lokale Variablen, Rekursion, ...

Ohne: Vererbung, statische Felder, Threads, ...

Sprachbericht→ Webseite

Erweiterungen sind erlaubt solange die geforderte Funktionalität enthalten ist (auf eigene Verantwortung)

(8)

Aufgabe

Firm libfirm.org

SSA basierte Zwischensprache in Graphform Statements sind Knoten

Abhängigkeiten sind Kanten Reihenfolge nur noch als Halbordnung i386 Backend vorhanden

(9)

Aufgabe

Java Bytecode

Platformunabhängig

Komfort: Laufzeitumgebung, Garbage Collector, ...

Stackmaschine→ Registervergabe entfällt

1 class A { int i; }

2

3 class B {

4 A a;

5 int x;

6

7 static B foo(int x, B b) {

8 A a = b.a;

9 int i = b.x;

10 a.i = i + x;

11 return b;

1 static B foo(int, B);

2 0: aload_1

3 1: getfield #2; //Field a

4 4: astore_2

5 5: aload_1

6 6: getfield #3; //Field x

7 9: istore_3

8 10: aload_2

9 11: iload_3

10 12: iload_0

11 13: iadd

12 14: putfield #4; //Field A.i

(10)

Bis zum nächsten Treffen

Bis zum nächsten Treffen

Einlesen

System einrichten: SVN, eclipse, etc.

Java oder C?

Wahl der Tools: Antlr, selbstgeschriebener Parser, lex/yacc Aufgabenblatt →Webseite

MiniJava

(11)

Bis zum nächsten Treffen

Viel Erfolg

Noch Fragen?

Kleine Motivation: Gute Umsetzungen könnten im Firm-Projekt übernommen werden

Referenzen

ÄHNLICHE DOKUMENTE

Welche Datenstrukturen werden für Tokens benutzt. Manche Tokenarten haben

static expression_t ∗parse_subexpression(precedence_t precedence) { expression_parser_function_t ∗parser = &expression_parsers[token.type];. /∗ parse prefix expression or

Ergebnisse werden nach der Präsentation bekannt gegeben Gewinner erhalten Ruhm und

Vereinfachung des Automaten möglich wenn man Schlüsselwörter in Stringtabelle einträgt und Regeln für IDENTIFIER benutzt. Starke Reduktion

Operatoren lassen sich dynamisch anlegen (z.B. für

In einigen Bereichen (Pakete, Klassen, Methoden, Felder) dürfen Bezeichner vor ihrer Definition benutzt werden?. Dies ist der Hauptgrund warum semantische Analyse in Java/MiniJava

Korrektheit: Optimierungen sollen Semantik erhalten Effizienz: Optimierung muss auch große Programme in angemessener Zeit verarbeiten können... Optimierungen

Knoten auf Offsets im Activation Record zuweisen Phase 2 – Assembler