Compiler. Einführung. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München. Letzte Änderung:

Ähnliche Dokumente
Was ist ein Compiler?

Einführung in die Systemprogrammierung

Compilerbau mit Phoenix

Compiler, Übersetzer. Allgemeine Erklärung / Definition

Formale Sprachen und Grammatiken

Interpreter - Gliederung

Struktur und Implementierung von Programmiersprachen I. (Compilerbau) SS 2006

Fachseminar WS 2008/09

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

den Einsatz von generierenden Werkzeugen und Theorien und von Software-Engineering-Methoden

Grammatiken und ANTLR

Kapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie

4. 4. Algorithmen und Datenstrukturen in deskriptiven Programmiersprachen

Formale Sprachen und Automaten

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Grundbegriffe der Informatik

1. Java Grundbegriffe

Kapitel 1: Einführung

Übersetzergenerierung mit lex und yacc

Modellierung und Programmierung 1

Coma I. Einleitung. Computer und Algorithmen. Programmiersprachen. Algorithmen versus Programmiersprachen. Literaturhinweise

JAVA als erste Programmiersprache Semesterkurs

Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken

10 Erweiterung und Portierung

Programmiertechnik. Prof. Dr. Oliver Haase Raum G124 Tel: 07531/ Oliver Haase Hochschule Konstanz 1

Einführung in die objektorientierte Programmierung. mit Squeak

Tooldemo: Soot. Softwareanalyse SS 2011 Veranstalter: Prof. Dr. Klaus Ostermann Tillmann Rendel, M.Sc. Von Kim Maurice Nuspl

Einführung in die Computerlinguistik Einführung in Python (1)

1 ÜBERSETZER. Compilerbau 1

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Static-Single-Assignment-Form

Flexibles E-Assessment auf Basis einer Service-orientierten Architektur

Übung Theoretische Grundlagen

1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.

Programmierkurs II. C und Assembler

Mächtigkeit von WHILE-Programmen

2.2 Rechnerorganisation: Aufbau und Funktionsweise

Seite Seite 2

7. Formale Sprachen und Grammatiken

Raytracing auf Desktop PCs Optimizing Cache Usage (Intel Corp.)

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Grammatiken. Einführung

Vorlesung Rechnerarchitektur. Einführung

Einleitung und Begriffliches. Einleitung. Programmiersprachen. Software-Komplexität ist inhärent und hat vor allem folgende Ursachen

Zwischencodeerzeugung Compiler II

Sprachübersetzer, T-Diagramme, Compiler, Scanner und Parser

Einführung in Generatives Programmieren. Bastian Molkenthin

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

Einführung zu den Übungen aus Softwareentwicklung 1

Programmieren. Hexenwerk oder Zauberspuk? Kinderuniversität Mittwoch, 16. März 2016 Kinder-Akademie Fulda & Hochschule Fulda

IT-Basics 2. DI Gerhard Fließ

Einführung in die Programmierung

Grundlagen der Informatik Übungen 1.Termin

Grundlagen des Software Engineering

Übersetzung objektorientierter Programmiersprachen

ObjectBridge Java Edition

VBA-Programmierung: Zusammenfassung

2 Grundlagen der Programmierung

Vorkurs Informatik WiSe 15/16

Projekt Systementwicklung

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2013

Java Einführung Programmcode

2 Der Schnelleinstieg *

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Ausarbeitung des Interpreter Referats

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik Was ist Informatik? Teilgebiete der Informatik 8

Compiler. Die unsichtbaren Diener Der Compiler und seine Artgenossen. Laszlo Böszörmenyi Compiler 1/ 22

Liebe Team-Mitglieder der Einstein-Constructors, liebe Interessierte,

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Übersetzung von Programmiersprachen

2.11 Kontextfreie Grammatiken und Parsebäume

0. Einführung. C und C++ (CPP)

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

J.5 Die Java Virtual Machine

Kapitel 5: Statische Analyse

ARBEITSBLATT ZU FORMALEN SPRACHEN

Einführung in die Programmierung

Formale Sprachen, reguläre und kontextfreie Grammatiken

Zentralabitur 2017 Informatik

Programmiersprachen und Übersetzer

LISE MEITNER GYMNASIUM NEUENHAUS UELSEN

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

Grundlagen und Basisalgorithmus

Einführung (0) Erster funktionsfähiger programmgesteuerter Rechenautomat Z3, fertiggestellt 1941 Bild: Nachbau im Deutschen Museum München

Die Programmiersprache C

Compiler und Codegenerierung. Hw-Sw-Co-Design

4.Grundsätzliche Programmentwicklungsmethoden

Programmieren was ist das genau?

Verteilte Systeme. Verteilte Systeme. 5 Prozeß-Management SS 2016

Zentralabitur 2018 Informatik

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Kapitel 02. Java was, wann, warum, wieso. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Java für C++ Programmierer

C-PROGRAMMIERUNG - STRUKTUREN. Marcel Lebek

Berater-Profil SW-Entwickler/-Designer (Rational Rose, ClearCase, J2EE, C++, CORBA -TAO/Orbix-)

Kompilieren und Linken

Quellcode-Repräsentation in Eclipse. Seminarvortrag PG Reclipse Jan Rieke

Transkript:

Compiler Einführung Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 10.05.2017 15:49 Inhaltsverzeichnis Ein Compiler................................... 2 Ein Compiler................................... 2 Das Studium vom Compilerbau......................... 2 Konzeptionelle Roadmap.............................. 3 Programmiersprachen............................... 3 Compiler...................................... 3 Interpreter...................................... 4 Kombinationen................................... 4 oft als JIT................................... 4 Warum sollten Sie sich mit Compilerdesign beschäftigen............ 4 Theorie und Praxis................................. 4 Die elementaren Prinzipien der Compilierung.................. 5 Erstes Prinzip................................. 5 Zweites Prinzip................................ 5 Compilerstruktur.................................. 7 Compilerstruktur................................. 8 Optimierer..................................... 10 Überblick über die Compilierung 11 Frontend....................................... 11 Scanner....................................... 11 Parser........................................ 11 Typüberprüfung (type checking).......................... 12 1

Zwischenrepräsentation............................... 12 Zwischenrepräsentation: Beispiel Graph...................... 13 Zwischenrepräsentation: Beispiel lowlevel, sequentieller Code.......... 13 Der Optimierer................................... 14 Beispiel....................................... 14 Das Backend.................................... 14 Ein Compiler ist ein Computerprogramm das ein Programm geschrieben in einer Sprache in ein Programm geschrieben in einer anderen Sprache übersetzt Ein Compiler ist ein großes Softwaresystem mit vielen internen Komponenten, Algorithmen und komplexen Interaktionen zwischen beiden Das Studium vom Compilerbau ist eine Einführung in Techniken für die Übersetzung und Optimierung von Programmen und eine praktische Übung in Software Engineering Letzte Änderung: 10.05.2017 15:49 2

Konzeptionelle Roadmap ein Compiler muss die Syntax und die Bedeutung der Eingabesprache sowie die Syntax und die Bedeutung der Ausgabesprache verstehen und ein Compiler benötigt ein Abbildungsschema von der Quell- zur Zielsprache Programmiersprachen formale Sprachen haben rigide Eigenschaften und Bedeutungen sind so entworfen, dass sie keine Mehrdeutigkeiten enthalten Compiler Quellsprachen z.b. Java, C, C++, Zielsprachen z.b. Maschinensprache, Bytecode für die JVM oder.net es gibt aus source-to-source-translators z.b. Übersetzung einer neuen Programmiersprache nach C und andere, z.b. LaTeX to PostScript Markdown to HTML Letzte Änderung: 10.05.2017 15:49 3

Interpreter führen ein Programm aus benötigen aber auch Scanner, Parser, Zwischenrepräsentationen, z.b. Python, Perl, Scheme, Kombinationen Compiler nach Bytecode Bytecode wird von einem Interpreter ausgeführt oft als JIT Compiler der zur Laufzeit übersetzt just-in-time compiler Warum sollten Sie sich mit Compilerdesign beschäftigen Ein Compiler enthält einen Informatik-Mikrokosmos gierige (greedy) Algorithmen (register allocation) heuristische Suchtechniken (list scheduling) Graphalgorithmen (dead-code elimination) dynamische Programmierung (instruction selection) endliche Automaten und Kellerautomaten (scanning and parsing) Fixpunktalgorithmen (data-flow analysis) Ein Compiler muss mit folgenden Problemen umgehen können dynamischer Allokation Synchronization Namensgebung Lokalität hierarchischem Speichermanagement Pipelinescheduling Theorie und Praxis Compiler demonstrieren den erfolgreiche Anwendung der Theorie auf praktische Probleme Werkzeuge zum Generieren von Scannern und Parsern Letzte Änderung: 10.05.2017 15:49 4

wenden Ergebnisse aus der formalen Sprachtheorie an die selben Werkzeuge werden für die Textsuche, das Filtern von Websites, die Textverarbeitung und Kommandozeileninterpreter verwendet Typüberprüfung und statische Analyse wenden Ergebnisse der Verbandstheorie, der Zahlentheorie und anderer mathematischer Teilgebiete an Codegeneratoren benutzen Algorithmen für die Mustererkennung in Bäumen, das Parsen, die dynamische Programmierung und Textvergleiche Die elementaren Prinzipien der Compilierung Erstes Prinzip Der Compiler muss die Bedeutung des zu compilierenden Programms erhalten. Zweites Prinzip Der Compiler muss das Eingabeprogramm auf wahrnehmbare Art und Weise verbessern. Letzte Änderung: 10.05.2017 15:49 5

Letzte Änderung: 10.05.2017 15:49 6

Compilerstruktur Letzte Änderung: 10.05.2017 15:49 Ein 2-Phasen-Compiler 7

Compilerstruktur das Frontend muss seine Kenntnis der Quellsprache nutzen muss sicherstellen, dass das Quellprogramm wohlgeformt ist die Zwischenrepräsentationen (intermediate representation, IR) ist die maßgebliche Repräsentation des Codes für den Compiler es kann mehrere Zwischenrepräsentationen für verschiedene Compilerphasen geben das Backend muss die IR abbilden auf die Befehlsmenge und die endlichen Ressourcen Letzte Änderung: 10.05.2017 15:49 8

Letzte Änderung: 10.05.2017 15:49 9

Optimierer Letzte Änderung: 10.05.2017 15:49 Ein 3-Phasen-Compiler 10

Überblick über die Compilierung Frontend muss die Programmstruktur mit deiner Sprachdefinition vergleichen formale Definition = endliche Menge von Regeln = Grammatik, z.b. Satz Subjekt Verb Objekt Satzendezeichen Verb und Satzendezeichen sind Teile der Sprache Satz, Subjekt und Objekt sind syntaktische Variablen das Symbol heisst leitet her Scanner Beispiel: Compiler sind technische Objekte. der Scanner nimmt diesen Zeichenstrom und wandelt ihn um in einen Strom von klassifizierten Worten Beispiel: (Substantiv, Compiler ), (Verb, sind ), (Adjektiv, technische ), (Substantiv, Objekte ), (Satzendezeichen,. ) Parser Regeln 1. Satz Subjekt Verb Objekt Satzendezeichen 2. Subjekt Substantiv 3. Subjekt Modifikator Substantiv 4. Objekt Substantiv 5. Objekt Modifikator Substantiv 6. Modifikator Adjektiv wenn es möglich ist eine Herleitung zu finden, die mit dem Nichtterminal Satz startet und endet mit Substantiv Verb Adjektiv Substantiv Satzendezeichen dann gehört der Satz Compiler sind technische Objekte. zur Sprache der Prozess der automatisch nach so einer Herleitung sucht heisst Parsen Letzte Änderung: 10.05.2017 15:49 11

Typüberprüfung (type checking) das Frontend ist außerdem dafür zuständig Typkonsistenz zu überprüfen z.b. a = a * 2 * b * c * d mag syntaktisch wohlgeformt sein aber wenn b und d Zeichenketten sind, ist der Ausdruck ungültig Zwischenrepräsentation Ziel des Frontends ist eine Zwischenrepräsentation des Codes zu erzeugen verschiedene Formen Graphen Assemblerprogramme Letzte Änderung: 10.05.2017 15:49 12

Zwischenrepräsentation: Beispiel Graph DAG für a = a 2 b c d Zwischenrepräsentation: Beispiel lowlevel, sequentieller Code Lolevel, sequentieller Code für a = a 2 b c d: t0 = a * 2 t1 = t0 * b t2 = t1 * c t3 = t2 * d a = t3 Letzte Änderung: 10.05.2017 15:49 13

Der Optimierer analysiert die Zwischenrepräsentation und schreibt den Code so um, dass er das selbe berechnet, aber in einer effizienteren Art und Weise reduziert die Laufzeit der Anwendung oder reduziert die Größe des generierten Codes oder reduziert die Energie die der Prozessor verbraucht oder Beispiel ursprünglicher Code b =... c =... a = 1 for i = 1 to n read d a = a * 2 * b * c * d end verbesserter Code... t = 2 * b * c for i = 1 to n read d a = a * d * t end besser aber als ProgrammiererIn nicht darauf verlassen, sondern selbst schon guten Code schreiben Das Backend durchläuft die Zwischenrepräsentation gibt Code für die Zielplattform aus Instruction Selection wählt die Maschinenbefehle aus die der jeweiligen IR-Operation entsprechen Letzte Änderung: 10.05.2017 15:49 14

Register Allokation entscheidet welche Werte in Registern und welche im Hauptspeicher gehalten werden Instruction Scheduling ermittelt die Reihenfolge in der die Befehle effizient ausgeführt werden können Letzte Änderung: 10.05.2017 15:49 15