Einführung in die Systemprogrammierung



Ähnliche Dokumente
Einführung in die Systemprogrammierung

Was ist ein Compiler?

Version 0.3. Installation von MinGW und Eclipse CDT

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

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

Quelltextähnlichkeit

Fachseminar WS 2008/09

1 ÜBERSETZER. Compilerbau 1

Current Topics in Software Technology Aktuelle Themen der Softwaretechnologie

Grammatiken. Einführung

Beispiel einer Übersetzung

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

Formale Sprachen und Grammatiken

Ausarbeitung des Interpreter Referats

Java Einführung Operatoren Kapitel 2 und 3

Kompilieren und Linken

10 Erweiterung und Portierung

Grundbegriffe der Informatik

Programmiersprachen und Übersetzer

Deklarationen in C. Prof. Dr. Margarita Esponda

Compilerbau mit Phoenix

Trace- und Zeit-Zusicherungen beim Programmieren mit Vertrag

Theoretische Informatik I

Grundbegriffe der Informatik

Einführung in die Systemprogrammierung

Praktikum Compilerbau

Objektorientierte Programmierung für Anfänger am Beispiel PHP

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

Parser4Kids interaktive Lernumgebung

Programmiersprachen und Übersetzer

1 Vom Problem zum Programm

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

Übungen zu C++ Kapitel 1

Die Industrie- und Handelskammer arbeitet dafür, dass Menschen überall mit machen können

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

Sie erhalten in diesem Dokument einige Tipps, wie Sie die Anzeigegeschwindigkeit für Ihre Eingabe optimieren. Folgende Themen finden Sie

Mathematische Grundlagen der Informatik 2

Benutzerverwaltung mit Zugriffsrechteverwaltung (optional)

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

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Dialekte der Klimaforschung

Softwarepraktikum: Einführung in gcc / g++

Erstellen einer digitalen Signatur für Adobe-Formulare

Das Zen Theme. Drupal User Group Berlin Naori

Definition Compiler. Bekannte Compiler

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Ihre Online-Bewerbung

Das Leitbild vom Verein WIR

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

Hilfe zum Service Einzug

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Semantik von Formeln und Sequenzen

Einführung in die Informatik Grammars & Parsers

Schnittstelle DIGI-Zeiterfassung

5 Kernfragen bei der Optimierung von Vertriebs- Organisationen

Fragebogen zur Nutzung des Angebots der Hochschulbibliothek an elektronischen Medien:

ÖVSV Mitglieder-Datenbank. Benutzerhandbuch Version 1.2.1

Öffnen Sie den Internet-Browser Ihrer Wahl. Unabhängig von der eingestellten Startseite erscheint die folgende Seite in Ihrem Browserfenster:

IT-Tutorial. Access Microsoft. Infos zur Migration von Access I MPRESSUM

Programmieren. Wie entsteht ein Programm

Mobile Payment Einführung Definition Szenarien Technologien Fazit

Abacus Formula Compiler (AFC)

Theoretische Grundlagen des Software Engineering

Benutzerhandbuch MedHQ-App

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

Einführung in PHP. (mit Aufgaben)

Anleitung PDF erstellen aus Word

Theoretische Informatik I

Träumen kann man ja...

Mächtigkeit von WHILE-Programmen

Checkliste Webauftritt

IntelliRestore Seedload und Notfallwiederherstellung

Übersetzergenerierung mit lex und yacc

Einleitung... 2 Eingeben der Daten... 2 Datenabgleich... 3 Zusammenfassung... 5

Fragen für die Klausuren

Memeo Instant Backup Kurzleitfaden. Schritt 1: Richten Sie Ihr kostenloses Memeo-Konto ein

Erste Schritte. Lavid-F.I.S. Agentur. Erste Schritte

POP -Konto auf iphone mit ios 6 einrichten

1. Einführung. 2. Weitere Konten anlegen

Reporting Services und SharePoint 2010 Teil 1

Naturgewalten & Risikoempfinden

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Seriendruck mit der Codex-Software

Kurzanleitung /Kompalitätstest Barcode. Sie haben zwei Möglichkeiten unsere Barcode/Strichcodes für Ihren eigenen stationären Einzelhandel zu nutzen.

Einrichtung eines Zugangs mit einer HBCI-Chipkarte bei der Commerzbank

Ausfüllhilfe für die ESTA Beantragung zur Einreise in die Vereinigten Staaten

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

Schulinternes Curriculum für Informatik (Q2) Stand April 2015

Tipps zur Nutzung der ViT 1 Lernen ViT Üben HAU ViT ViT ViT ViT ViT Testen ViT VORSC Bewerten RAGTIME ViT zur Vollversion ViT

ias Lizenzleitfaden Beispiel

trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005

Version NotarNet Bürokommunikation. Bedienungsanleitung für den ZCS-Import-Assistenten für Outlook

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Softwareentwicklung Schrittweise Verfeinerung, Programmieren üben: Tic-Tac-Toe in Raten

Anleitung So klappt der Downloadschnitt

Anleitung Typo3-Extension - Raumbuchungssystem

Rainer Stropek cubido. Baumschule Expression Trees in C#, CLR und DLR

Unsere vier hilfreichsten Tipps für szenarienbasierte Nachfrageplanung

Übungsblatt 3: Algorithmen in Java & Grammatiken

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Transkript:

Einführung in die Systemprogrammierung Sprachen und Übersetzer Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 4. Juni 2015

Sprachen vs. Übersetzer Sprache C11 Übersetzer GNU C Compiler Intel C Compiler LLVM/Clang Sprachen können verschiedene Implementierungen haben: Übersetzer Interpreter Laufzeit-Übersetzer Sprachdefinition vereinigt Sprachimplementierungen

Die Struktur von Programmiersprachen Sprachdefinition gibt an: Lexikalische Sprachstruktur (Lexeme/Tokens) Grammatische Sprachstruktur (Syntax) Sprachsemantik: Statische Semantik Semantik der Namen: Welcher Name bindet an welche Definition? Semantik der Typen: Welche Typen können wie miteinander verknüpft werden? Dynamische Semantik Laufzeitverhalten des Programmes Beinhaltet meist: Reihenfolge und Inhalt von Ein- und Ausgaben Beinhaltet meist nicht: Ausführungsgeschwindigkeit, benötigter Speicherplatz Optimierungen müssen Sprachsemantik erhalten!

Der Übersetzer C-Programm Frontend Lexikalische Analyse Syntaxanalyse Namensanalyse Typüberprüfung Zwischenform Middle-End Optimierung Backend Registerauswahl Befehlsauswahl Codeerzeugung Fehlermeldungen Assembler-Code

Der Übersetzer: Frontend: Lexikalische Analyse Eingabe: { x = 17 + 3L; char *c = x; } Lexikalische Analyse zerlegt Eingabe in Tokens/Lexeme Erzeugt vom Lexer (Tokenizer, Scanner) Ignoriert Leerzeichen, Zeilenumbrüche etc. (in C und C-artigen Sprachen) Tokens und Lexeme: punctuator { identifier x punctuator = constant 17 punctuator + constant 3 long-suffix L punctuator ; char char punctuator * identifier c punctuator = identifier x punctuator ; punctuator }

Der Übersetzer: Frontend: Parser compound-statement initializer declarator -constant -constant { x = 17 + 3 L ; { } x = 17 + 3L; char *c = x; declarator initializer char * c = x ; } Parser erzeugt AST (Abstract Syntax Tree)

Frontend: Namensanalyse compound-statement initializer declarator -constant -constant x 17 + 3 L char declarator * c initializer x Verwendungen von Namen werden an ihre Definitionen gebunden

Frontend: Typanalyse (1/2) compound-statement initializer declarator x -constant 17 + -constant long 3 L char declarator * c char* initializer x Typen werden an Namen gebunden

Frontend: Typanalyse (2/2) compound-statement initializer declarator x -constant -constant long 17 + 3 L Γ τ(declarator) = τ(initializer) Typfehler: char* declarator initializer char * c char* x Typregeln erzwingen Typkorrektheit

Der Übersetzer: Middle-End Frontend erzeugt Zwischenform des Programmes Zwischenform hilft bei Programmanalyse: Welche Programmteile hängen voneinander ab? (Kontrollfluß/Daten) Welche Programmteile benötigen welche Ressourcen? Middle-End optimiert Programmrepräsentierung Optimierte Zwischenform geht an Backend

Der Übersetzer: Optimierungen Optimierung = Programmanalyse a + Transformation t Gegeben Programm p. Falls a(p): Ergebnis von p = Ergebnis von t(p) Beispiel: a[0] = 0; // A0 a[1] = a[0] ; // A1 f(); a[2] = a[0] ; // A2 A1 auf a[1] = 0 änderbar A2 nur auf a[2] = 0 änderbar, wenn f() nicht nach a[0] schreibt Korrekte Programmanalysen sind konservativ: Wenn ich nicht weiß, ob ich darf, darf ich nicht

Der Übersetzer: Backend Backend erzeugt Assembler- oder Maschinencode Unterstützt oft verschiedene Prozessoren und Aufrufkonventionen Wesentliche Aufgaben: Registerauswahl: Welche Variablen in welche Register? (gesichert, temporär, Spezialregister) Andere Variablen in den Stapelspeicher Befehlsauswahl: Effiziente Befehle suchen, um Ausdrücke abzubilden (Direkt-Operation, Register-Operation usw.) Architekturspezifische Optimierungen

Zusammenfassung: Der Übersetzer Drei Übersetzerphasen: Frontend liest Programm ein Typanalyse und Fehlersuche Erzeugt Zwischenrepräsentation Middle-End optimiert Zwischenrepräsentation Kann übersprungen werden (schnelle Übersetzung, langsamer Code) Backend bildet Zwischenrepräsentation auf Assembler/Maschinencode ab Evtl. kleinere maschinenspezifische Optimierungen