/******************************************************************************/ /*** Aufruf: schreibe < ea.dat > compiler.c ***/ /*** ***/ /*** Dieses Programm liest den DET-EA aus der Standarteingabe ein und ***/ /*** kreiert daraufhin den Source-Code fuer das C-Programm, welches die ***/ /*** Zuordnung der Token zu entsprechenden Eingabezeichen leistet. ***/ /*** Dieses Programm heisst nach der Konvention von oben : 'compiler.c' und ***/ /*** muesste dann noch compiliert werden, damit der Aufruf: ***/ /*** compiler < Programm.mms ***/ /*** einen Tokenstrom liefert. ***/ /*** ***/ /*** Das Grundprogramm fuer 'compiler.c' ist in den Dateien: ***/ /*** blaock_a.dat, ... ,block_f.dat aufgeteilt worden. Lediglich die ***/ /*** Constanten und Endzustaende, Tokenklassen etc, welche ja variable sind ***/ /*** und von der jeweiligen Programmiersprache abhaengen, werden dann neu ***/ /*** erzeugt und in 'compiler.c' reingeschrieben ... ***/ /*** ***/ /******************************************************************************/ #include #include #include #include #define BUFSIZE 100 int main(void){ FILE *infile,*outfile,*outfile1; int f[600]; /*** sollt doch wohl reichen ***/ int t[100]; char Buffer[BUFSIZE]; int c; int zaehler; int i; int end, token; char kommentar_start[10]; /*** 10 Zeichen sollten doch wohl reichen ***/ char kommentar_ende[10]; int anzahl_der_zustaende; int anzahl_der_endzustaende; int anzahl_der_abbildungen; char dummy[BUFSIZE]; int start, via, ziel; /****************************************************/ /*** Schreibe 'block_a.dat' in 'compiler.c rein' ***/ /****************************************************/ infile = fopen("block_a.dat","rb"); if (!infile){ printf("Fehler beim Oeffnen von block_a.dat\n"); } while( (c=getc(infile)) != EOF){ putc(c,stdout); } /*********************************************************/ /*** Schreibe die beiden defines in 'compiler.c' rein. ***/ /*********************************************************/ gets(Buffer); sscanf(Buffer,"%s %d",dummy,&anzahl_der_zustaende); gets(Buffer); sscanf(Buffer,"%s %d",dummy,&anzahl_der_endzustaende); printf("#define anz_der_endzustaende %d\n",anzahl_der_endzustaende); printf("#define anz_der_zustaende %d\n",anzahl_der_zustaende); fclose(infile); outfile = fopen("block_0.dat","wb"); outfile1 = fopen("block_1.dat","wb"); i=0; while( i