Programmerzeugungssysteme

Modul Programmerzeugungssysteme (ab JG11), 5 CP ECTS

Vorlesung/ Übung / Seminaristischer Unterricht im WT, 2. Studienjahr, 6 TWS, Prüfung 90 Min.

Inhalt

Es werden umfassende Kenntnisse über Funktion und Struktur von Meta-Programmen wie Compiler, Lader, Binder; Interpreter und Programm-Generatoren vermittelt. Die Studierenden erhalten eine grundlegende Einführung in den Compilerbau (reguläre Sprachen, Grammatik, Parsertechniken, Frontend-Backend-Struktur, Compiler-Compiler, lokale und globale Optimierungsmethoden) und lernen anhand eines C-Compilers die praktische Umsetzung eines Compilers kennen. Daneben wird aufgezeigt, wie größere Softwaresysteme strukturiert, Programm-Generatoren und andere Werkzeuge für die Softwareentwicklung eingesetzt werden.

Qualifikationsziele

Die Studierenden erwerben Kenntnis der Abläufe und Ergebnisse beim Übersetzen und Abarbeiten höherer Programmiersprachen. Sie können formale Sprachen für unterschiedliche Aufgabenstellungen entwerfen und deren Leistung sowie Grenzen beurteilen. Sie kennen die typischen Konzepte (wie z.B. reguläre Ausdrücke, Parsertechniken) für das Einlesen und Transformieren komplexer Daten und können diese anwenden. Mit Hilfe von Programm-Generatoren sind sie in der Lage, Übersetzer und Interpreter für einfache Sprachen zu entwickeln.

Voraussetzungen

Die Vorlesung setzt eine Reihe von Kenntnissen aus den vorangegangenen Lehrveranstaltungen voraus. Neben dem Verständnis der Inhalte werden im Speziellen folgende Themen als bekannt angenommen und können daher auch (implizit) mit geprüft werden:

  • Grundlagen der Informatik: Zahlensysteme und Notationen, Eigenschaften von Algorithmen, Formale Sprachen (insb. EBNF), Eigenschaften von Programmiersprachen, Zustandsdiagramme & Automaten, Verständnis für die Verarbeitung einer CPU.
  • Grundlagen der Programmierung: Fähigkeit, funktional und prozedural zu programmieren. Eigenschaften funktionaler/ imperativer/ objektorientierter Programmierung, Anwendung von Compiler und Interpreter, Präfix-/ Infix-/ Postfixnotation, Rekursion, Datenstrukturen, Listen, Schnittstellen und API-Spezifikationen
  • Maschinenorientiertes Programmieren: Fähigkeit, C-Programme zu schreiben und zu lesen. Literale und Datentypen in C, Deklaration und Definition von Funktionen, Funktionsaufruf, Compiler und Linker, dynamische Datenstrukturen wie Listen und Bäume, Zugriff auf Dateien, scanf(), printf() und Escape-Sequenzen.

Unterlagen werden auf dem Dokumentenserver (unintern) bereitgestellt.