Definition Compiler. Bekannte Compiler

Ähnliche Dokumente
Compiler; Übersetzungsprogramme. Grundlagen der Programmierung 3 A. Compiler für Programmiersprachen. Phasen eines Compilers

Compiler Ausarbeitung zum Proseminar C-Programmierung - Grundlagen und Konzepte. Torsten Zühlke 30.

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

Programmiersprachen und Übersetzer

Übersetzergenerierung mit lex und yacc

Übersetzergenerierung mit lex und yacc

Compilerbau. Einführung in Bison

Zwischencode-Erzeugung. 2. Juni 2009

Was ist ein Compiler?

Fachseminar. Semantische Analyse

Programmierung 2. Übersetzer: Das Frontend. Sebastian Hack. Klaas Boesche. Sommersemester

Einführung in die Systemprogrammierung

Compiler. Proseminar C-Programmierung - Grundlagen und Konzepte. Torsten Zühlke. 3. Juni 2011

C-Grundlagen. Einführung von Tronje Krabbe 1/21

Einführung. (Compiler) Prof. Dr. Oliver Braun. Letzte Änderung: :49. Einführung 1/26

Compiler. Proseminar C-Programmierung - Grundlagen und Konzepte. Torsten Zühlke. 3. Juni 2011

Grammatiken und ANTLR

Struktur und Implementierung von Programmiersprachen II. (Compilerbau) WS 2006/2007

1 ÜBERSETZER. Compilerbau 1

Definition von domänenspezifischen Sprachen mit Xtext: Einführung

Informatik II SS Der Kompilationsprozess (-phasen) Schreiben des Programms. Die Organisation eines typischen Compilers

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

Compiler: Einführung

Abstrakte Syntaxbäume

Übersetzerbau Cluj-Napoca, Rumänien 2007

Einführung Compilerbau

Teil 7: Interpreterbau Prof. Dr. Max Mühlhäuser FG Telekooperation TU Darmstadt

Definition von LR(k)-Grammatiken

Compiler und Codegenerierung. Hw-Sw-Co-Design

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Software Entwicklung 2. Übersetzerbau 1

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

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Generierung von Steuerungsprogrammcode für SPS und μc aus Petri-Netz-Modellen

Tüftelnde Dolmetscher

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

Kapitel 5: Syntaxdiagramme und Grammatikregeln

2. Programmierung in C

Leseprobe. Norbert Heiderich, Wolfgang Meyer. Technische Probleme lösen mit C/C++ Von der Analyse bis zur Dokumentation ISBN:

Vorsemesterkurs Informatik

a 1 a i a n $ s m Ausgabe LR-Parser X m s m-1 X m Action Goto Compilerbau Bachelorstudiengang Informatik/IT-Sicherheit

Fachseminar WS 2008/09

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Anwenundg regulärer Sprachen und endlicher Automaten

Compiler, Übersetzer. Allgemeine Erklärung / Definition

Interdisziplinäre fachdidaktische Übung: Modelle für Sprachen in der Informatik. SS 2016: Grossmann, Jenko

EINFÜHRUNG. Maschinenmodell. konkrete Maschine. Interpreter. universelle programmierbare Rechenmaschine:

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

Grundlagen der Programmentwicklung

Beuth Hochschule Einführende Gentle-Programme WS12/13, S. 1

Deterministischer Kellerautomat (DPDA)

Lexikalische Analyse, Tokenizer, Scanner

Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse

Inhalt Kapitel 11: Formale Syntax und Semantik

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

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir?

Semantische Analyse und attributierte Grammatiken

Erste Schritte der Programmierung in C

Kapitel 4: Syntaxdiagramme und Grammatikregeln

7 Einführung in den Compilerbau

6.1 Syntaxdefinition einer Sprache. 6. Sprachübersetzer

Seite Seite 2

Kompilieren Datentypen Operatoren. Überblick. 1 Kompilieren. 2 Datentypen. const static volatile. 3 Operatoren. Alexander Batoulis

Interpreter - Gliederung

Programmiervorkurs Einführung in Java Tag 1

Programmieren. Wie entsteht ein Programm

Einführung in die Programmierung 1

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

pue13 January 28, 2017

Übersicht. Übersetzungsprozess gcc(i) als Steuerprogramm Assembler Binder Hauptprogramme in C

C++ Templates. Wozu Templates? Definition von Templates. Gebrauch von Templates. Instanziierung und Organisation

Satz Umstrukturierung für statistisch. Anna Schiffarth Dozentin: Miriam Kaeshammer Fortgeschrittene Methoden der statistisch maschinellen Übersetzung

Werkzeuge zur Programmentwicklung

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

Grundlagen des Übersetzerbaus

Grundlagen der Informatik. Mathias Buhr

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

6. Sprachübersetzer (Compiler)

6. Grundlagen der Programmierung

Deterministische PDAs

Computergrundlagen Programmiersprachen, Interpreter, Compiler, Linker

Praktikum Compilerbau

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Gedächtnisprotokoll, mündliche Prüfung Übersetzerbau (01810) am Allgemeine Fragen

Ergänzungen zur Theoretischen Informatik. Compilerbau mit ANTLR. Literatur Das Standardwerk zum Compilerbau ist [1].

Zwischencodeerzeugung Compiler II

Beispiel einer Übersetzung

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

9.4 Grundlagen des Compilerbaus

C- Kurs 06 Übersetzung & Module

7. Syntax: Grammatiken, EBNF

Einführung in die Informatik II. Maschinennahe Programmierung 2: Übersetzung von Konstrukten höherer Programmiersprachen

BACHELORARBEIT. Herr Robert Morgenstern

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

Welche Voraussetzung muss eine Sprache erfüllen damit sie übersetzt werden kann? Sie muss eine kontextfreie Grammatik haben.

Informatik I Übung, Woche 40

Transkript:

Compiler Inhalt: Definition Compiler / bekannte Compiler Klassifikationen von Compilern Analyse-Synthese-Modell der Kompilierung Analyse des Quellprogramms Synthesephase Die Phasen eines Compilers Symboltabellenverwaltung / Fehlerbehandlung Umgebung eines Compilers Möglichkeiten zur Vereinfachung eines Compilers Stark vereinfachte Graphik zum kompletten Compilerprozess

Definition Compiler Ein Compiler ist ein Programm, dass ein in einer bestimmten Sprache (Quell-Sprache) geschriebenes Programm in ein äquivalentes Programm einer anderen Sprache (Ziel-Sprache) übersetzt. Eine wichtige Teilaufgabe besteht darin, Fehler im Quellprogramm zu finden. Bekannte Compiler GNU Compiler Collection (GCC) Intel C++ Compiler (ICC) Microsoft Visual C++ Borland C++Builder

Klassifikationen von Compilern Ein-Pass-Compiler: Durchlauf: 1 Resultat: ausführbare Datei Mehr-Pass-Compiler: Bei diesem Compiler wird der Quellcode auch einmal durchlaufen. Dabei wird der Durchlauf intern zerteilt und in mehrere Elemente zwischengespeichert.die ausführbare Datei wird aus den zwischengespeicherten Elementen generiert Load-and-Go Compiler: nach kompilieren direkt ausführbare Datei z.b. gcc test.c müsste direkt was starten? Interpreter: (z.b. Python) keine ausführbare Datei zur Laufzeit: Code einlesen, analysieren, ausführen

Übersetzungsprozess (Kompilierprozess) Analyse-Teil (Frontend) Im Frontend wird der Code analysiert, Strukturiert (Zwischendarstellung als Baum) und auf Fehler überprüft. Synthese-Teil (Backend) Im Backend: Konstruktion d. Zielprogramms aus der Zwischendarstellung (wird nicht Detailliert betrachtet)

Die Analyse des Quellprogramms Lexikalische Analyse Syntaktische Analyse Semantische Analyse

Lexikalische Analyse Bei der lexikalischen Analyse wird der Quelltext von links nach rechts gelesen und anschließend in zusammengehörende Token verschiedener Klassen unterteilt, z. B. Schlüsselwörter, Bezeichner, Zahlen und Operatoren. Beispiel: position := initial + rate * 60 1. Bezeichner position 2. Zuweisungssymbol := 3. Bezeichner initial 4. Plus-Zeichen + 5. Bezeichner rate 6. Multiplikations-Zeichen * 7. Zahl 60

Syntaktische Analyse Die syntaktische Analyse überprüft, ob der eingelesene Quellcode ein korrektes Programm der zur übersetzenden Quellsprache ist, d.h., der Syntax (Grammatik) der Quellsprache entspricht. Dabei wird die Eingabe in einen Syntaxbaum umgewandelt. Dieser Teil wird auch als Parser bezeichnet. Falls der Quellcode nicht zur Grammatik der Quellsprache passt, gibt der Parser einen Syntaxfehler aus. Syntaxbaum (position := initial + rate * 60 ) := position + initial * rate 60

Semantische Analyse Das Programm wird auf semantische Richtigkeit überprüft, wobei die in der Syntaxanalyse ermittelte hierarchische Struktur zugrunde gelegt wird. Wesentliche Elemente der semantischen Analyse sind etwa: Typprüfungen := Eindeutigkeitsprüfungen int + Gültigkeitsprüfungen position int initial char * 60 rate

Synthesephase Zwischencodeerzeugung: Viele moderne Compiler erzeugen aus dem Syntaxbaum einen Zwischencode, der schon relativ maschinennah sein kann und führen auf diesem Zwischencode z.b. Programmoptimierungen durch. Codegenerierung: Erzeugung von Zielcode in Maschinencode oder Assemblercode.

Die Phasen eines Compilers

Symboltabellenverwaltung Speicherung der im Quellprogramm benutzten Namen und deren Attribute (Speicherbedarf, Typ, Gültigkeitsbereich, Wert,...). Wann wird was in die Symboltabelle eingetragen? lexikalische Analyse syntaktische Analyse semantische Analyse Code-Erzeugung Namen z.b. Gültigkeitsbereich z.b. Gültigkeitsbereich Attribute bezügl. Speicherplatz Fehlerbehandlung Jede Phase kann auf Fehler stoßen. Ein Fehler muss auf geeignete Weise behandelt werden. (wieso?)

Umgebung eines Compilers

Möglichkeiten der Vereinfachung eines Compilers

:= := position:=initial+rate*60; position:=initial+rate*60; position + initial * int position int initial + char * 60 rate 60 rate