next up previous contents
Nächste Seite: Linker und Lader Aufwärts: Programmübersetzung Vorherige Seite: Programmübersetzung   Inhalt

Compiler

Compiler übersetzen den Quellcode von Programmen, die in Assembler oder in einer höheren Programmiersprache geschrieben sind, in den vom Rechner zu verarbeitenden Objekt- oder Maschinencode (auch Zielcode). Dabei arbeiten verschiedene Komponenten zusammen. Abbildung 3.7 zeigt schematisch, wie auf einem Rechner aus den Source-Files ausführbarer Code generiert wird.

Abbildung: Überführung des Quellcodes in ein ausführbares Programm
\begin{figure}\begin{center}
{\unitlength0.65mm
\begin{center}
\begin{picture}(...
...
\end{picture}\par\end{center}}
\par\vspace*{0.5cm}
\par\end{center}\end{figure}

Compiler übersetzen ein Quellprogramm als Ganzes und generieren daraus ein Objektprogramm. Es kann, wenn es nicht verändert werden soll, gespeichert und ohne nochmaliges Übersetzen beliebig oft abgearbeitet werden.

Die Übersetzung läuft in der Regel in mehreren Durchgängen (,,pass``) ab. Der erste Durchgang beinhaltet eine lexikalische Analyse auf der Ebene einzelner Wörter und eine Syntaxüberprüfung des Programms. Dabei werden die Anweisungen und die syntaktische Programmstruktur auf Zulässigkeit geprüft. Die Compiler geben Fehlermeldungen aus, die von einfachen Fehlercodes (,,error no. xxx in line yyy``) bis hin zu komfortablen Diagnosemeldungen mit Angabe der fehlerhaften Programmabschnitte reichen. In weiteren Durchgängen wird eine Tabelle für die Zuordnung von Namen zu Adressen (,,cross reference list``) erzeugt und das Programm in Objektcode übertragen. Hieran können sich Optimierungsläufe anschließen, in denen der Objektcode nach unterschiedlichen Gesichtspunkten (meist Programmausführungszeit -- ,,execution time``) und in verschiedenen Stufen optimiert wird.

Die Compilation lässt sich durch Optionen beim Compileraufruf oder durch spezielle Quellcodeanweisungen steuern. So kann der Ausdruck des Quellcodes, des Übersetzungsprotokolls (,,compiler listing``) der Fehlermeldungen, des Objektcodes, des Assemblercodes u.a. angefordert werden. Weitere Optionen sind das Einbinden von Quellprogrammen oder -programmteilen aus Bibliotheken in den Quelltext (,,include``) sowie bedingte Compilation.

Neben den Compilern gibt es die Interpreter. Sie gehen befehlsweise vor, indem sie jeweils einen Programmbefehl übersetzen und diesen unmittelbar abarbeiten. Interpretierendes übersetzen, wie es insbesondere von der Programmiersprache BASIC her bekannt ist, hat den Nachteil, dass das Programm bei jeder Ausführung erneut übersetzt werden muss und nicht optimiert werden kann. Von Vorteil ist jedoch die Möglichkeit des interaktiven und befehlsweisen Abarbeitens der Programme. Die Shell ist ein Interpreter, der die eingegebenen Befehle direkt übersetzt und ausführt.


next up previous contents
Nächste Seite: Linker und Lader Aufwärts: Programmübersetzung Vorherige Seite: Programmübersetzung   Inhalt
Lars Tornow 2003-04-02