programmierbare Codegeneratoren

Ebenso wie bei der Syntax ergibt sich die Frage, was ein Codegenerator eigentlich macht. Als wichtigsten Punkt stellt er Maschinencode für einen Prozessor her. Aber das ist nicht alles, denn hier gilt es noch eine weitere Unterscheidung zu treffen: Ein Code, der für Intel x86 hergestellt wird, läuft nicht auf Windows und Linux. Ein Codegenerator generiert also Maschinencode für einen Prozessor in unterschiedliche Formate, zum Beispiel Object-Files, die von einem Linker gebunden werden müssen. Die Aufgabe des Linkers kann durch den Compiler übernommen werden, in dem mehrere Objekt-Files zu einem Executable gebunden „kompiliert“ werden.

Auch die Unterscheidung System-Architektur und Betriebsystem könnte unter Umständen durch einen zusätzlichen Compiler-Durchlauf aufgelöst werden, in dem alle vom Betriebsystem abhängigen Komponenten aus dem Quelltext herauskompiliert werden und ein betriebsystemabhängiger Quelltext für eine Kompilierung auf einen beliebigen Prozessor entstehen würde.

Mit der Festlegung des Bestriebsystem ergeben sich für die Festlegung der Architektur allerdings eventuell Probleme. Besitzt ein System keine Schnittstellen, um zum Beispiel die serielle Schnittstelle anzusprechen, so greift es direkt auf den entsprechenden Controller zu. Dieser systemabhängige Zugriff kann nicht einkompiliert werden, solange nicht feststeht, auf welche Ziel-Architektur kompiliert wird. Hier ist Zielarchitektur und Betriebsystem von einander abhängig.
Das System braucht also die Information, welche Zielarchitektur angedacht ist und der Zielarchitektur u.U. die Information für welches System kompiliert wird.

Dies entspricht sicherlich nicht dem Regelfall, es hat aber auch im Alltag Sinn diese Unterteilung nicht zu serialisieren, da im Normalfall für eine Architektur und ein Betriebsystem kompiliert wird. Damit wäre im Normalfall ein zusätzlicher Compilerlauf notwendig, der bei gleichzeitiger Beachtung von System und Architektur wegfallen kann.

Es werden zwei besondere Beschreibungsabschnitte erforderlich, die System und Architektur. Beide nehmen keinen Einfluss auf die Programme, sondern beschreiben lediglich die Codegenerierung.