Beispiel einer Übersetzung



Ähnliche Dokumente
Compiler und Codegenerierung. Hw-Sw-Co-Design

Zwischencodeerzeugung Compiler II

Einführung in die Systemprogrammierung

1 ÜBERSETZER. Compilerbau 1

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

Static-Single-Assignment-Form

Praktikum Compilerbau

Was ist ein Compiler?

Äquivalente Grammatiken / attributierte Grammatik

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Technische Informatik 1 Übung 2 Assembler (Computerübung) Matthias Meyer

Übersicht Programmablaufsteuerung

Kurze Einführung in die Programmiersprache C++ und in Root

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen.

Programmierung für Mathematik (HS13)

Tutorium Rechnerorganisation

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Übung 9 - Lösungsvorschlag

Nuetzlicher Kleinkram

C/C++ Programmierung

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Kapitel 12: Übersetzung objektorienter Konzepte

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Propädeutikum. Dipl.-Inf. Frank Güttler

Informatik I (D-MAVT)

Übersetzergenerierung mit lex und yacc

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Einführung in die C++ Programmierung für Ingenieure

Einführung in die Programmiersprache C

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Zusammenfassung des Handzettels für Programmieren in C

Programmiersprachen und Übersetzer

Programmierkurs Java

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Java Kurs für Anfänger Einheit 5 Methoden

Ausgewählte Kapitel eingebetteter Systeme

Einführung in die C-Programmierung

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg Universitätsstraße 31, Regensburg

C++ Tutorial: Timer 1

2D22 Prinzipien der Softwareentwicklung. Prinzipien der Softwareentwicklung S. Strahringer 1

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Übungen zu C++ Kapitel 1

Mächtigkeit von WHILE-Programmen

Grundlagen. Kapitel 1

Methodische Grundlagen des Software Engineering - Übung 9

Programmiertechnik II

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT

Unterprogramme, Pointer und die Übergabe von Arrays

Fallunterscheidung: if-statement

Codes und Informationsgehalt

Übersetzung objektorientierter Programmiersprachen

Compiler, Übersetzer. Allgemeine Erklärung / Definition

Verbindung HELIUM V und WebShop (Magento). Verbindung zwischen HELIUM V und WebShop AioS

Trace- und Zeit-Zusicherungen beim Programmieren mit Vertrag

Diplomarbeit Antrittsvortrag

Computer-Architektur Ein Überblick

Fachseminar WS 2008/09

Werkzeuge zur Programmentwicklung

Algorithmen und Programmieren II Einführung in Python

KV Software Engineering Übungsaufgaben SS 2005

Applications Applets (eingeschränkte Rechte)

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Algorithms & Datastructures Midterm Test 1

Motivation und Überblick

L6. Operatoren und Ausdrücke

Tagesprogramm

SOMA Reverse Engineering

IT-Basics 2. DI Gerhard Fließ

Kapitel MK:IV. IV. Modellieren mit Constraints

FB Informatik. Fehler. Testplan

DLLs (dynamic loaded libraries) mit MingW erstellen

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff

Preisliste (Stand 21.Oktober 2015) Zahlen Sie bequem per Kreditkarte oder per Vorkasse

Moderne C-Programmierung

Zählen von Objekten einer bestimmten Klasse

Technische Informatik 1

Softwaretechnik 1 Tutorium

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Einführung in PHP. (mit Aufgaben)

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Stephan Brumme, SST, 2.FS, Matrikelnr

Die Programmiersprache C

Propädeutikum. Dipl.-Inf. Frank Güttler

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Optimierung der Code-Generierung virtualisierender Ausführungsumgebungen zur Erzielung deterministischer Ausführungszeiten

Objektorientierte Programmierung

Technische Informatik I Übung 3: Assembler

Kontrollstrukturen und Funktionen in C

Einführung in die Programmierung mit C++

Version 0.3. Installation von MinGW und Eclipse CDT

Grundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Transkript:

Beispiel einer Übersetzung Ausdruck in C aktuelle_zeit = Startzeit + vergangene_minuten*60 + vergangene_sekunden; Ausdruck im Instruktionssatz des R10000 LW r1,minuten LW r1,sekunden ADDI r2,r0,60 ADD r1,r1,r3 LW r3,startzeit MFLO r3 MULTU r1,r2 ADD r1,r1,r3 61

Quelldatei des Benutzers weitere Module Preprocessor modifizierte Quelldatei Fehlermeldung Frontend eines Compilers Symboltabelle Analyse der Quelldatei Fehlermeldung Zwischencode Kern des Compilers, abgeschlossene Einheit Synthese des Assemblercodes Assemblerdatei Assembler Kommentare, Hinweise Backend des Compilers Verschiebbarer Objektcode weiterer Objektcode Laden / Binden ausführbarer Maschinencode Fehlermeldung 62

Analyseschritte beim Übersetzen Quelldatei Fehlermeldungen lexikalische Analyse syntaktische Analyse Symboltabelle semantische Analyse 63

Parsebaum für den Ausdruck 6+3+2-5 Term Term Term Zahl Zahl Zahl Zahl 6 + 3 + 2-5 64

Parsebaum für den Ausdruck while (a>b) c++ while stmt while ( expr ) stmt comma expr assignment stmt, 65

Parsebaum für den Ausdruck 3+4+7 cr P E.wert=14 cr E.wert=7 + A.wert=7 E.wert=3 + A.wert=4 Ziffer.lexwert=7 A.wert=3 Ziffer.lexwert=4 Ziffer.lexwert=3 66

Parsebaum für die Definition int stunden, minuten, sekunden R ; T.typ:=Integer V.att=Integer int V.att=Integer, sekunden V.att=Integer, minuten stunden 67

Probleme mit Optimierungen Ursprungsprogramm void test (float* a, float* b, int n, int k) { int i; for (i = n-1; i >= 0; i--) a[i] = a[i] + b[k] + 100000.0; return; } Optimiertes Programm void test (float* a, float* b, int n, int k) { int i; float c; c = b[k] + 100000.0; for (i = 0; i < n; i++) a[i] = a[i] + c; return; } 68

Typische Operationen im Drei-Adress-Code x = y op z goto L if x relop y goto L : bedingter Sprung relop ist eine Vergleichsoperation x = y [i] x = & y x = * y : indizierte Zuweisung : Adresse von y : Inhalt der Adresse von y 69

Beispiel: Bubble-Sort-Programm for (i=n-2; i>=0; i--) for (j=0; j<=i; j++) if (A[j] > A[j+1]) { temp = A[j]; A[j] = A[j+1]; Vertauschen von A[j] und A[j+1] A[j+1] = temp; } 70

Drei-Adress-Code des Bespiels 1 i = n-2 2 L5: if i < 0 goto L1 3 j = 0 4 L4: if j > i goto L2 t1 = j t2 = 4 * t1 t3 = A[t2] #A[j] 5 t4 = j+1 t5 = 4 * t4 t6 = A[t5] #A[j+1] if t3 <= t6 goto L3 t7 = j t8 = 4 * t7 temp = A[t8]#temp = A[j] t9 = j+1 t10 = 4 * t9 t11 = A[t10] 6 t12 = j t13 = 4 * t12 A[t13] = t11 t14 = j+1 t15 = 4 * t14 A[t15] = temp 7 8 L3: j = j+1 goto L4 L2: i = i-1 goto L5 L1: halt # A[j+1] # A[j] = A[j+1] #A[j+1] = temp A[j] benötigt ein Wort (4 Byte) A[j] befindet sich an addr (A) + 4 * j 71

Kontrollflussgraph des Bubble-Sort-Programms Start 1 2 3 Halt 4 5 8 6 7 72

Abhängigkeitsgraph des Grundblocks 6 t7 t9 t12 t14 t8 t10 t13 t15 temp t11 echte Abhängigkeiten A[t13] Schreibabhängigkeit? Blockierabhängigkeit? A[t15] 73

Common Subexpression Elimination t8 = 4 * j temp = A[t8] t9 = j+1 t10 = 4 * t9 t11 = A[t10] t13 = 4 * j A[t13] = t11 t14 = j+1 t15 = 4 * t14 t8 = 4 * j temp = A[t8] t9 = j+1 t10 = 4 * t9 t11 = A[t10] t13 = t8 A[t13] = t11 t14 = t9 t15 = 4 * t14 t8 = 4 * j temp = A[t8] t9 = j+1 t10 = 4 * t9 t11 = A[t10] A[t8] = t11 A[t15] = temp A[t15] = temp A[t10] = temp 3-Adress-Code 3-Adress-Code nach Common Subexpression Elimination Optimierter 3-Adress-Code 74

Superoptimierung t1 = j t2 = 4 * t1 t3 = A[t2] t4 = j + 1 t5 = 4 * t4 t6 = A[t5] if t3 t6 goto L3 t1 = j t2 = 4 * t1 t4 = j + 1 t5 = 4 * t4 t3 = A[t2] t6 = A[t5] if t3 t6 goto L3 t2 = 4 * j t5 = t2 + 4 t3 = A[t2] t6 = A[t5] if t3 t6 goto L3 3-Adress-Code 3-Adress-Code nach Umordnung 3-Adress-Code nach Superoptimierung 75

Bubble-Sort-Programm Grundblock 5 Grundblock 6 t1 = j t2 = 4 * t1 t3 = A[t2] t4 = j+1 t5 = 4 * t4 t6 = A[t5] if t3 <= t6 goto L3 t7 = j t8 = 4 * t7 temp = A[t8] t9 = j+1 t10 = 4 * t9 t11 = A[t10] t12 = j t13 = 4 * t12 A[t13] = t11 t14 = j+1 t15 = 4 * t14 A[t15] = temp t2 = 4 * j t5 = t2 + 4 t8 = 4 * j t10 = t8 + 4 t13 = 4 * j A[t8] = t11 t15 = t13 + 4 A[t10] = temp 76

Teil des Kontrollflussgraphen des Bubble-Sort Programms 5 6 Eine Übertragung der Optimierungen von Grundblock 5 auf Grundblock 6 ist möglich. 7 Eine Übertragung der Optimierungen von Grundblock 5 auf Grundblock 7 ist nicht möglich. 77

Optimierte Grundblöcke 5 und 6 des Bubble-Sort-Programms 5 6 t2 = 4 * j t5 = t2 + 4 t3 = A[t2] t6 = A[t5] if t3 t6 goto L3 t8 = 4 * j t10 = t8 + 4 temp = A[t8] t11 = A[t10] A[t8] = t11 A[t10] = temp t2 = 4 * j t5 = t2 + 4 t3 = A[t2] t6 = A[t5] if t3 t6 goto L3 A[t2] = t6 A[t5] = t3 3-Adress-Code nach Grundblockoptimierung 3-Adress-Code nach erweiterter Grundblockoptimierung 78

Registerzuweisung...... t1 = 4 * j t2 = A[t1] t3 = t1 + 4 t4 = A[t3] t5 = t3 + 4 t6 = t4 + t2 A[t5] = t6 3-Adress Code Ausschnitt j t1 t2 t3 t4 t5 t6 Lebensdauer der Variablen 79

Registerzuweisung über Knotenfärbung R3 = 4 * R1 j R2 = A[R3] t5 t6 t1 R3 = R3 + 4 R4 = A[R3] R3 = R3 + 4 t4 t3 t2 R4 = R4 + R2 A[R3] = R4 Interferenzgraph 3-Adress Code nach Registerzuweisung 80