Der zu generierende Code wird prozedurweise erzeugt und ausgegeben. Es wird jeweils der Code einer Prozedur in den Codeausgabepuffer geschrieben und am Ende der Prozedur wird der Puffer in das Codefile geschrieben und wieder als leer gekennzeichnet. Die Codeausgabe wird über einen Satz von Funktionen realisiert. Folgende Funktionen zur Codeerzeugung sind verfügbar:
Die zentrale Funktion ist die Funktion code, eine Funktion mit variabler Argumentliste. Sie bekommt den Befehlscode, ggf. gefolgt von den anzugebenden Parametern.
Beispiele:
code(entryProc,0,pCurrPr->IdxProc,0);
code(retProc);
code(puAdrVrLocl,pV->Dspl);
Die Datei CodeGen.c enthält eine Reihe von Funktionen zur Unterstützung der Codegenerierung.
/*----------------------------------------------*//*----------------------------------------------*/
/*Schreiben von Code in den Codeausgabebereich */
int code(tCode Code,...);
/*--------------------------------------*/
/*
Oeffnen/Schliessen der Ausgabedatei */
int
openOFile(char* arg);
int closeOFile(void);
void
wr2ToCode(short x)
{
*pCode++=(unsigned
char)(x & 0xff);
*pCode++=(unsigned
char)(x >> 8);
}
void
wr2ToCodeAtP(short x,char*pD)
{
* pD =(unsigned char)(x & 0xff);
*(pD+1)=(unsigned
char)(x >> 8);
}
Die Generierung der Zwischencodebefehle geschieht in den semantischen Aktionen.