Compilerbau

Die Prinzipien und Techniken des Compilerbaus sind themenübergreifend. Compilerbau umfasst Programmiersprachen, Rechnerarchitektur, Sprachtheorie, Algorithmen und Software-Engineering. Dazu reichen wenige Compilerbautechniken aus, um Compiler - Übersetzer - für ein breites Spektrum an Sprachen und Maschinen zu erstellen.


Die Beschaffenheit und Einschränkungen der Zielsprache und der Laufzeitumgebung müssen sorgfältig betrachtet werden, weil sie einen starken Einfluss auf den Compilerentwurf haben und darauf, welche Codegenerierungsstrategie er verwenden könnte.

Eine erfolgreiche Quellsprache wird wahrscheinlich auf mehreren Zielmaschinen implementiert. Wenn eine Sprache besteht, werden Compiler für die Sprache benötigt, um Code für verschiedene Zielplattformen zu generieren. Eine weitere Entwicklung der Maschinenhardware ist möglich, daher sind anpassbare Compiler von Vorteil. Daraus folgt, dass der Entwurf ebenso wichtig ist wie die Begrenzung von maschinenspezifischen Details auf eine kleine Zahl von Modulen, aus der sich der Compiler insgesamt zusammenfügt.

Es gibt verschiedene Aspekte der Compiler-Leistungsfähigkeit die beim Compilerbau zu berücksichtigen sind: Compilergeschwindigkeit, Codequalität, Fehlerdiagnostik, Portabilität und die Wartungsfreundlichkeit. Die Abgrenzungen zwischen diesen Kriterien sind nicht so klar, und die Compilerspezifikation dürfte viele dieser Parameter unspezifiziert lassen.

Die Entwicklung der Compiler

Seit die ersten Compiler in den frühen fünfziger Jahren aufkamen, hat sich unser Wissen über Aufbau und Entwicklung von Compilern stark weiterentwickelt. Es ist schwierig, für den ersten Compiler ein genaues Datum anzugeben, denn anfangs haben verschiedene Gruppen unabhängig voneinander sehr viel experimentiert und implementiert. Viele der frühen Arbeiten über Compilerbau beschäftigen sich mit der Übersetzung arithmetischer Formeln in Maschinen-code.

Die ganzen fünfziger Jahre hindurch galten Compiler durchweg als schwer zu schreibende Programme. Der Aufwand zur Implementierung des ersten Fortran-Compilers - Backus et al,1957 - betrug beispielsweise 18 Mannjahre. Seitdem wurden systematische Techniken entdeckt, um mit vielen Aufgaben fertig zu werden, die sich während einer Compilierung ergeben. Außerdem wurden gute Implementierungssprachen, Programmierumgebungen und Software-Werkzeuge entwickelt.

Methoden des Compilerbaus

Es gibt verschiedene allgemeine Methoden, die ein Compilerbauer ergreifen kann. Die einfachste ist einen bestehenden Compiler an eine Sprache oder Zielplattform anzupassen. Wenn es keinen geeigneten Compiler gibt, könnte der Compilerbauer den Aufbau eines bekannten Compilers für eine ähnliche Sprache übernehmen und die entsprechenden Komponenten implementieren, indem er komponentengenerierende Werkzeuge benutzt oder sie von Hand implementiert. Es ist relativ selten, dass ein komplett neuer Compileraufbau erforderlich ist.

Egal welche Methode ergriffen wird, das Schreiben eines Compilers ist eine Übung im Software-Engineering. Ergebnisse aus anderen Software-Werken können angewendet werden, um die Zuverlässigkeit und Wartbarkeit des fertigen Produkts zu erhöhen. Ein Entwurf, der sich ohne Schwierigkeiten Änderungen anpasst, wird es erlauben, dass der Compiler sich mit der Sprache weiterentwickelt. Die Verwendung von compilerbildenden Werkzeugen kann in diesem Bezug eine bedeutende Hilfe sein.

Für den automatisierten Entwurf spezifischer Compiler-Komponenten wurden einige allgemeine Werkzeuge geschaffen. Diese Werkzeuge verwenden spezielle Sprachen zur Spezifikation und Implementierung einer Komponente. Viele arbeiten mit relativ ausgefeilten Algorithmen. Am erfolgreichsten sind diejenigen Werkzeuge, die die Details des Erzeugungsalgorithmus verbergen und Komponenten produzieren, die leicht in die anderen Teile des Compilers integriert werden können. Die folgende Zusammenstellung nennt einige hilfreiche Werkzeuge zum Compilerbau:

Parser Generatoren: Parser Generatoren erzeugen Parser aus einer Eingabe, die gewöhnlich auf einer kontextfreien Grammatik aufbaut.

Scanner Generatoren: Scanner Generatoren erzeugen automatisch Scanner. Eingabe ist gewöhnlich eine auf regulären Ausdrücken basierende Spezifikation.

Syntaxgesteuerte Übersetzungsmaschinen: Diese generieren eine Sammlung von Routinen, die einen Parse-Baum durchwandern und dabei einen Zwischencode erzeugen.

Automatische Code-Generatoren: Ein solches Werkzeug erhält als Eingabe eine Menge von Regeln, die für jede Operation deren Übersetzung von der Zwischensprache in die Maschinensprache der Zielplattform definieren.

Datenflussmaschinen: Viele der Informationen, die man für eine gute Code-Optimierung braucht, gewinnt man erst durch eine Datenfluss-Analyse. D.h. man sammelt Informationen darüber, wie Werte von einem Teil eines Programms in einen anderen Teil übertragen werden.

Informationen zum Artikel
Deutsch: Compilerbau
Englisch:
Veröffentlicht: 08.04.2012
Wörter: 638
Tags: #Programmiersprachen
Links: Algorithmus, Aspekt, Aufwand, Code, Compiler