Übersetzung von Programmiersprachen



Ähnliche Dokumente
Übersetzer und sprachverarbeitende Werkzeuge

Praktikum Compilerbau

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

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

Was ist ein Compiler?

Dr. Hanno Schauer Mons-Tabor-Gymnasium Montabaur. UML-Klassendiagramme als Werkzeug im Unterricht

10 Erweiterung und Portierung

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

Programmieren was ist das genau?

Programmieren Lernen mit BYOB. Gerald Futschek 5. November 2012

Übersetzung objektorientierter Programmiersprachen

Grundbegriffe der Informatik

Einführung in die Systemprogrammierung

Version 0.3. Installation von MinGW und Eclipse CDT

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Prinzipien Objektorientierter Programmierung

Institut für Telematik Universität zu Lübeck. Programmieren. Kapitel 0: Organisatorisches. Wintersemester 2008/2009. Prof. Dr.

ActiveCharts. Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0

Einführung in PHP. (mit Aufgaben)

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

Einführung in Eclipse und Java

Robot Karol für Delphi

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

Einführung in die Informatik II

Programmiersprachen und Übersetzer

Grammatiken. Einführung

Formale Sprachen und Grammatiken

Abschnitt 16: Objektorientiertes Design

VBA-Programmierung: Zusammenfassung

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Es war einmal... "StudyING: Welten bewegen - Welten gestalten"

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Objektorientierte Programmierung

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

JAVA als erste Programmiersprache Semesterkurs

Diplomarbeit Antrittsvortrag

Vortrag von: Ilias Agorakis & Robert Roginer

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Modulhandbuch für das BA Kombinationsfach Angewandte Informatik Multimedia

Schulinterner Lehrplan für das Fach Informatik der Sekundarstufe II an der Bettine von Arnim Gesamtschule

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich. Softwaretechnik I

Fragen. f [ ] = [ ] f (x : y : ys) = x y : f ys f (x : xs) = f (x : x : xs) Wozu evaluiert f [1, 2, 3] (Abkürzung für f (1 : 2 : 3 : [ ]))?

Online-Publishing mit HTML und CSS für Einsteigerinnen

3. Stored Procedures und PL/SQL

Einführung in Generatives Programmieren. Bastian Molkenthin

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

Die Softwareentwicklungsphasen!

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Proseminar Technische Informatik A survey of virtualization technologies

4. 4. Algorithmen und Datenstrukturen in deskriptiven Programmiersprachen

Algorithmik II. SS 2003 Prof. Dr. H. Stoyan Lehrstuhl für Informatik 8 ( Künstliche Intelligenz) stoyan@informatik.uni-erlangen.

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Objektorientierte Programmierung

Äquivalente Grammatiken / attributierte Grammatik

Grammatiken in Prolog

2. Datenbank-Programmierung

Algorithmische Methoden zur Netzwerkanalyse Vorlesung für den Bereich Master Informatik

Theorie der Informatik

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Fachseminar WS 2008/09

Informatik I Tutorium WS 07/08

Kapitel 5: Dynamisches Programmieren Gliederung

Vorkurs Informatik WiSe 15/16

PHP Kurs Online Kurs Analysten Programmierer Web PHP

Einführung in die Informatik Tools

C++ mit. Microsoft Visual C Richard Kaiser. Einführung in Standard-C++-, C++/CLI und die objektorientierte Windows.

Individuelle Erweiterung des generierten Codes. 16. Januar 2013

Nebenläufige Programmierung

Prolog basiert auf Prädikatenlogik

Algorithmische Methoden zur Netzwerkanalyse Vorlesung für den Bereich Master Informatik

J.6 Programmierung eingebetteter Systeme

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Wissenswertes über binäre Felder

Übungen zu C++ Kapitel 1

Theoretische Informatik I

Informatik I Debugging

Kapitelübersicht. Was ist So#waretechnik? Historische Entwicklung der So9waretechnik Prinzipien, Methoden, Werkzeuge. Was bedeutet Objektorien+erung?

Softwareanforderungsanalyse

Algorithmen mit Python

Language Workbench. Aktuelle Themen der Softwaretechnologie. Vortrag von: Arthur Rehm Steven Cardoso. Betreut von: Prof. Dr.

Visual Basic Express Debugging

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Wintersemester 2010/2011 Rüdiger Westermann Institut für Informatik Technische Universität München

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Informatik. Kap 0 Organisation

Modellbasierte Softwareentwicklung

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Objektorientierte Programmierung. Kapitel 12: Interfaces

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

Software Engineering. Bibliographisches Institut & F. A. Brockhaus AG, Mannheim; Spektrum Akademischer Verlag GmbH, Heidelberg, 2003

Praktische Informatik 1

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe

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

Erfolg ist programmierbar.

IT-Basics 2. DI Gerhard Fließ

Transkript:

Übersetzung von Programmiersprachen Arnd Poetzsch-Heffter AG Softwaretechnik TU Kaiserslautern Wintersemester 2005/06 1

1.Kapitel: Einführung Aufbauend auf den Techniken zur syntaktischen Analyse formaler Beschreibungssprachen konzentriert sich diese Vorlesung auf - Techniken und Algorithmen zur - semantikerhaltenden und - optimierenden - Übersetzung von - Quellsprachprogrammen in - Zielsprachprogramme. Aufbau von Kapitel 1: Überblick und Umfeld Allgemeine Aspekt des Übersetzerbaus Inhalt und Lernziele Literatur: R. Wilhelm, D. Maurer: Übersetzerbau. Springer-Verlag. 1992. A. Appel: Modern Compiler Implementation in Java. Cambridge University Press. 1999. 2

1.1 Überblick und Umfeld Begriffsklärung: Übersetzungsaufgabe: Quellcode Übersetzer Fehlermeldung Zielcode Übersetzer (im weiteren Sinne) realisiert: Analyse & Optimierung & Übersetzung Quellcode: Eingabe(-Zeichenreihe) für Übersetzer; sollte der Syntax der Quellsprache (QS) genügen. Zielcode: Ausgabe(-Zeichenreihe) des Übersetzer; muss der Syntax der Zielsprache (ZS) genügen. 3

typische Quellsprachen: - Programmiersprachen: C, C++, C#, Java, ML, Cobol, Smalltalk, Prolog,... Skriptsprachen (JavaScript), Kommandosprachen - Sprachen für Konfigurationsmanagement (make,..) - Anwendungs- & werkzeugspezifische Sprachen (Excel, Lex, Max,...) - Spezifikationssprachen (Z, Isabelle/HOL, CASL) - Formatierungs- und Datenbeschreibungssprachen (LaTeX, HTML, XML,...) - Entwurfs- & Architekturbeschreibungssprachen (UML, SDL, VHDL, Darwin,...) typische Zielsprachen: - Assembler- und Maschinensprachen - Programmiersprachen (z.b. C) - Daten- und Layoutbeschreibungssprachen - Sprachen zur Drucksteuerung 4

Zur Übersetzungszeit: während der Übersetzer läuft. Alle Informationen und Aspekte, die schon zur Übersetzungszeit bekannt sind, nennt man statisch. Z.B. Typprüfung der Programms, Konstante Ausdrücke auswerten, Relativadressen festlegen,... Zur Laufzeit: während das übersetze Programm ausgeführt wird. Alle Informationen und Aspekte, die statisch noch unbekannt sind, nennt man dynamisch. Z.B. Allokation von Feldern variabler Größe, Bereichsprüfung von Feldern, dynamische Bindung von Methoden, Speicherverwaltung für rekursive Prozeduren. Da der Übersetzer dynamische Aspekte nicht zur Übersetzungszeit behandeln kann, erzeugt er dafür Code. Der Code erledigt die Aspekte dann zur Laufzeit. 5

Anwendungsbereiche der Techniken: (exemplarisch) Realisierung von Programmierumgebungen: - kontextsensitive Editoren, Klassenbrowser,... - graphische Programmierwerkzeuge - Präprozessoren - Übersetzer - Interpreter - Debugger - Laufzeitumgebung (Laden, Linken, Ausführen, Speicherverwalten) Generierung von Programmen aus Entwurfsdokumenten (UML,... ) Programmverstehen, Reengineering Entwurf und Implementierung anwendungsspezifischer Sprachen: - Robotersteuerung - Simulationswerkzeuge - Tabellenkalkulatoren, aktive Dokumente Web-Technologie: - Analyse von Web-Sites - aktive Webseiten (mit integrierter Funktionalität) - abstrakte Plattformen: JVM,.Net - Optimieren von Caching 6

Angrenzende Gebiete: Formale Sprachen, Sprachspezifikation, -entwurf Programmier- und Spezifikationssprachen Programmierung, Softwareentwicklung, SW-Generierung, SW-Architektur Systemsoftware, Rechnerarchitektur gegenseitige Wechselwirkung Implementierungsaufgaben: Analyse: Übersetzung: Interpretation: Quellcode Quellcode Quellcode Eingabedaten Analysator Übersetzer Interpreter Analyse- Zielcode Ausgabedaten information häufig Kombination der Aufgaben 7

Beispiele: (Übersetzung) 1. Übersetzung eines C-Programms: int main() { printf("willkommen zur Vorlesung!"); return 0; } gcc.file "hello_world.c".version "01.01" gcc2_compiled.:.section.rodata.lc0:.string "Willkommen zur Vorlesung!".text.align 16.globl main.type main,@function main: pushl %ebp movl %esp,%ebp subl $8,%esp... 8

Das vollständige Zielprogramm:.file "hello_world.c".version "01.01" gcc2_compiled.:.section.rodata.lc0:.string "Willkommen zur Vorlesung!".text.align 16.globl main.type main,@function main: pushl %ebp movl %esp,%ebp subl $8,%esp addl $-12,%esp pushl $.LC0 call printf addl $16,%esp xorl %eax,%eax jmp.l2.p2align 4,,7.L2: movl %ebp,%esp popl %ebp ret.lfe1:.size main,.lfe1-main.ident "GCC: (GNU) 2.95.2 19991024 (release)" 9

2. Übersetzung eines LaTeX-Dokuments: groovy.tex (104 bytes) \documentclass{article} \begin{document} \vspace*{7cm} \centerline{\huge\bf It s groovy} \end{document} latex groovy.dvi (207 bytes, binary)... dvips groovy.ps (7136 bytes) %!PS-Adobe-2.0 %%Creator: dvips(k) 5.86... %%Title: groovy.dvi... 10

1.2 Allgemeine Aspekt des Übersetzerbaus Anforderungen Architektur Konstruktionstechniken Dimensionen des Übersetzerbaus Anforderungen an Übersetzer Gute Fehlerbehandlung (statisch & dynamisch) Effizienter Zielcode Wahlmöglichkeit: schnelle Übersetzung & weniger effizienter Code versus langsamere Übersetzung & hoch effizienter Code semantisch korrekte Übersetzung: Übersetztes Programm verhält sich gemäß der Sprachdefinition der Quellsprache 11

D.h. mit semqs: QS-Programme x QS-Daten QS-Daten semzs: ZS-Programme x ZS-Daten ZS-Daten compile: QS-Programme ZS-Programme code: QS-Daten ZS-Daten decode: ZS-Daten QS-Daten sollte für alle QS-Programme P, QS-Daten D gelten: semqs(p,d) = decode(semzs(compile(p),code(d))) Architektur von Übersetzern Bei Übersetzern unterstellt man normalerweise eine Phasenzerlegung in Analyse- und Synthesephasen. Unterschiede gibt es bei: - der Verwaltung von globaler Information - der Repräsentation der Zwischenformen - der Behandlung von Varianten 12

Übersetzerphasen: Quellcode als Zeichenreihe Scanner Symbolfolge Analyse Parser Syntaxbaum Namensbinden Typisieren Attributieren & Optimieren Attributierter Baum ( QS-nahe Repr.) Übersetzer im engeren Sinn Synthese Attributieren & Optimieren Zwischensprache ( ZS-nahe Repr.) Codegenerator Peephole- Optimierer Zielcode als Zeichenreihe 13

Aspekte von Übersetzerarchitekturen: Phasen zunächst einmal konzeptionell gemeint Ausführung der Phasen kann verschränkt sein Unterschied: Phase versus Pass (Pass: ein Durchgang durch das Programm) genaue Festlegung der Phasen ist von Quell-, Zielsprache und Entwurfsentscheidungen abhängig Kombination mit anderen Architekturentscheidungen: QS_1 QS_2... QS_m gemeinsame Zwischensprache ZS_1 ZS_2... ZS_n getrennte Übersetzung: Programmteile können unabhängig von einander übersetzt werden; Schnittstelleninformation benutzter Elemente anderer Programmteile muss verfügbar sein. 14

Konstruktionstechniken A. Schrittweise Konstruktion: Programmierung basiert üblicherweise auf Existenz eines Übersetzers für die Implementierungssprache. Bei Übersetzerkonstruktion kann davon im Allg. nicht ausgegangen werden; stehe QS ZS PS für einen Übersetzer der in Sprache PS geschrieben ist und QS in ZS übersetzt. 1. Konstruktion mit Übersetzer für andere Sprache: Gesucht: QS-Compiler, Ziel, läuft auf Annahme: C-Compiler existiert auf Plattform mit Maschinensprache QS QS zu entwickeln C C durch Übersetzung existiert 15

2. Konstruktion mit Übersetzer für anderen Rechner: Gesucht: C-Compiler auf 1 für 1 Annahme: C-Compiler auf 2 für 2 existiert Methode: realisiere zunächst Cross-Compiler 1.Schritt: C 1 C 1 C C 2 2 2 2.Schritt: Cross-Compiler C 1 C 1 C C 1 1 2 16

3. Bootstrapping: Gesucht: QS-Compiler auf für Annahme: kein Compiler verfügbar Methode: 1. Entwerfe Teilsprachen QS i von QS mit QS QS 0 U QS 1 U QS 2 U 2. Implementiere QS -Compiler für in 3. Implementiere QS -Compiler für in QS 4. Erzeuge QS -Compiler für in i+1 0 i+1 i durch Erweiterung QS QS QS 2 QS 2 QS 2 QS 1 QS 1 QS 1 QS 0 QS 0 durch Übersetzung von Hand 17

B. Mit Generierungswerkzeugen: Scanner-Generator / reguläre Ausdrücke Parser-Generator / kontextfreie Grammatik Attributauswertungsgenerator / Attributgrammatik Codegenerator-Generator / Maschinenbeschreibung weitere phasenspezifische Werkzeuge Interpretergeneratoren / Sprachsemantik C. Spezielle Programmiermethodiken: allgmeine Technik: syntaxgesteuert speziell: rekursiver Abstieg 18

Dimensionen des Übersetzerbaus Programmiersprachen (-sprachklassen): - sequentielle prozedurale, oo. Sprachen - funktionale, logische Sprachen - parallele Sprachen/Sprachkonzepte Zielsprachen/Maschine: - Code für abstrakte Maschine - Assembler - Maschinensprache (CISC, RISC,Superskalar,...) - Multiprozessorarchitekturen - Speicherhierarchie Übersetzungsaufgaben: Analyse, Optimierung, Synthese Konstruktionsmethoden und Werkzeuge Bootstrapping, Generatoren,... Portabilität, Spezifikation, Korrektheit 19

1.3 Inhalt und Lernziele 1. Einführung: 1.1 Überblick und Umfeld 1.2 Allgemeine Aspekt des Übersetzerbaus 1.3 Inhalt und Lernziele 2. Übersetzung in die Zielsprache 2.1 Übersetzung prozeduraler Programmiersprachen 2.2 Übersetzung objektorientierter Sprachkonstrukte 2.3 Einblick in die Übersetzung funktionaler Sprachen 2.4 Ein einfacher Übersetzer 3. Ausgewählte Aspekte der Übersetzung 3.1 Zwischensprachen in der Übersetzung 3.2 Optimierung 3.3 Registerzuteilung 3.4 Weitere Aspekte der Übersetzung 4. Speicherbereinigung 4.1 Reference Counting 4.2 Mark & Sweep 4.3. Copying Collection 5. Zusammenfassung und Ausblick 20

Allgemeine Lernziele: Grundlagen der Übersetzung von Programmiersprachen Vertiefung in Programmiersprachen Genauere Kenntnis über die Ausführung von Programmen Erlernen ausgereifter, vielseitig einsetzbarer Methoden und Werkzeuge Kennen lernen des Zusammenwirkens von Theorie, Algorithmen, Ingenieurmethoden am Beispiel eines gereiften Gebiets der Informatik Übertragung in andere Gebiete 21