Lehrinhalte
Moderne Compiler zielen primär darauf ab, effizienten Code für eine bestimmte Plattform zu generieren und hierfür nutzen sie fortgeschrittene Analysis- und Transformationswerkzeuge. Eine solche Infrastruktur ist aber auch nützlich für Quellcodetransformation, z.B. für Werkzeuge, die Codes annotieren, instrumentieren, oder in eine kanonische Form bringen. Die Entwicklung solcher Werkzeuge ist für die C++ Sprache aufgrund ihrer Komplexität eine Herausforderung. Eine offene Compiler Infrastruktur, die in einer Vielzahl von Forschungs- und Produktionscompilern genutzt wird, ist die LLVM Infrastruktur (www.llvm.org). Ein vielgenutztes Front-End für C, C++ und objective C ist Clang, welches mächtige Mechanismen für die Extraktion von Information aus dem abstrakten Syntaxbaum zur Verfügung stellt, und so Modifikationen des Quellcodes wie auch die Generierung der Zwischenrepräsentation von LLVM ermöglicht.

Die Studierenden arbeiten mit verschiedenen Komponenten und Techniken des Clang/LLVM Frameworks und implementieren praktische Übungen für Quelltransformationen. Die Clang/LLVM Techniken beinhalten insbesondere die Handhabung und Matching Techniken auf dem abstrakten Syntaxbaum von Clang. Beispiele von Quelltransformationen werden verschiedene Facetten von Code-Erweiterung under -Refactoring beinhalten, z.B. für die Instrumentierung paralleler Codes, für die Übermittlung von Information zwischen der statischen Analyse und der Laufzeitumgebung von (parallelen) Codes, oder für Code Refactoring um bestimmte Coding Standards einzuhalten.

Voraussetzungen
Vorlesung Einführung in Compilerbau (EiCB), Vorlesung System- and Parallel Programming (SPP), Kentnisse von C++

Online-Angebote
moodle

Course Contents
Modern compilers are primarily designed to produce efficient code for a particular platform and in doing so they employ sophisticated analysis and transformation tools. Such an infrastructure is useful also for source code transformation, e.g. for tools to annotate, instrument, or canonicalize codes. The complexity of C++ makes the development of such tools a challenging task.
An open compiler infrastructure used in a variety of research and production compilers is the LLVM infrastructure (www.llvm.org). A well-established front-end for C, C++ and objective C is Clang, which provides powerful mechanisms for extracting information from an abstract syntax tree representation of the underlying code, and thus enables source code modifications as well as the generation of the LLVM intermediate representation.

The students will work with different components and techniques of the Clang/LLVM framework and implement practical exercises for source transformation. The Clang/LLVM techniques include, in particular, handling and matching of the Clang abstract syntax tree. Examples for source transformation will highlight various facets of code augmentation or refactoring, e.g. for instrumenting parallel codes, for passing information between the static analysis and runtime environment of (parallel) codes, or for code refactoring to conform to coding standards.

Preconditions
Lecture Introduction to Compiler Construction (EiCB), Lecture System- and Parallel Programming (SPP), Knowledge of C++

Semester: SoSe 2024