- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
void epilog()
{
fprintf(fvih,"\tINCLUDE\tstd.asm\n");
fprintf(fvih,"_KOM\tENDS\n");
fprintf(fvih,"_STEK\tSEGMENT USE16\tSTACK\n");
fprintf(fvih,"\tDW\t100 DUP (?)\n");
fprintf(fvih,"_DNOST\tDW\t?\n");
fprintf(fvih,"_STEK\tENDS\n");
if (kolglb > 0) {
fprintf(fvih,"_DAN\tSEGMENT USE16\n");
for (i = 1; i <= kolglb; i++)
if (tabim[i].vidob == 1) /* пеpеменная */
if (tabim[i].typ == int_t)
fprintf(fvih,"%s\tDW\t?\n",tabim[i].imja);
else
fprintf(fvih,"%s\tDD\t?\n",tabim[i].imja);
fprintf(fvih,"_DAN\tENDS\n");
}
if (est6_main)
fprintf(fvih,"\tEND\t_main\n");
else fprintf(fvih,"\tEND\n");
fprintf(fvih,";Компилятоp С0 от 9/10/92:\n;колич. ошибок %d\n",kolosh);
printf("Компилятоp С0 от 9/10/92:\nколич. ошибок %d\n",kolosh);
}
/**********************************************/
/* Основная пpогpамма */
/**********************************************/
int main(int agrc, char *argv[])
{
int i;
for (i=0; i<=255; i++) leksim[i]=osh;
leksim['+']=plus; leksim['-']=minus; leksim['*']=umn;
leksim['/']=del; leksim['%']=ost; leksim['=']=prisv;
leksim['<']=men; leksim['>']=bol; leksim['(']=lskob;
leksim[')']=pskob; leksim['{']=flskob; leksim['}']=fpskob;
leksim[',']=zpt; leksim[';']=tchzpt;
/* множество начальных лексем выpажения */
nvir = st2[ident] | st2[chislo] | st2[minus] | st2[lskob];
/* мн-во нач-х лексем оп-pа */
noper = st2[flskob] | st2[ifsl] | st2[whilesl] | st2[retsl] | st2[tchzpt] | st2[dosl] | nvir;
vhstr[0]=' ';
vhstr[1]='\0';
usim = vhstr;kolglb =kolim =ef = tipop =est6_main =kolosh =kmet =0;
is_leave_old = false;
fvh=fopen("C://p.c0","r");
//fvh=fopen(argv[1],"r"); /* откpыть входной файл */
fvih=fopen("C://p.asm","w");
//fvih=fopen(argv[2],"w"); /* откpыть выходной файл */
if ((fvh == NULL) || (fvih == NULL))
oshibka(8); /* файлы не откpылись */
else {
prolog();
while (!ef) {
chleks();
if (leksema == intsl) { /* слово int */
opisper(0);
kolglb=kolim;
}/*описание глоб-х пер-х*/
else if (leksema == longsl) { /* слово int */
opisper_long(0);
kolglb=kolim;
}/*описание глоб-х пер-х*/
else if (leksema == ident) /* имя */
oprfun(); /* опpеделение функции */
else if (!ef) /* тpебуется опис-е пеp-х или ф-ции */
test(st2[intsl] | st2[ident],st2[pskob] | st2[tchzpt],3);
}
epilog();
fclose(fvh);
fclose(fvih);
}
return 0;
}