
09.03.2010, 21:47
|
|
Постоянный
Регистрация: 13.11.2009
Сообщений: 437
С нами:
8680278
Репутация:
17
|
|
Сообщение от _antony
ну покажите ваш транслятор интересно же 
вот например одна из ф-ций трансляции
Код:
int xxx()
{
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;
nvir=st2[ident]|st2[chislo]|st2[minus]|st2[lskob];
noper=st2[flskob]|st2[ifsl]|st2[whilesl]|st2[retsl]|
st2[tchzpt]|nvir; /* ì*-âî **÷-õ ëåêñåì îï-p* */
vhstr[0]=' '; vhstr[1]='\0'; usim=vhstr;
kolglb=kolim=ef=tipop=est6_main=kolosh=kmet=0;
fvh=fopen("my_file.c","r");
fvih=fopen("my_file.asm","w");
if ((fvh==NULL) || (fvih==NULL))
oshibka(8);
else
{ gen_kom("", "ASSUME", "CS:KOM_,SS:STEK_,DS:DAN_");
gen_kom("STEK_", "SEGMENT", "STACK");
gen_kom("", "DW","10000 DUP (?)");
gen_kom("DNOST_","DW","?");
gen_kom("STEK_", "ENDS","");
gen_kom("KOM_", "SEGMENT","");
chleks();
while (!ef)
{ if (leksema==intsl)
{ opisper(0); kolglb=kolim; }
else if (leksema==ident)
oprfun();
else if (!ef)
test(st2[intsl]|st2[ident],st2[pskob]|st2[tchzpt],3);
}
gen_kom("","INCLUDE","std.asm");
gen_kom("KOM_","ENDS","");
if (kolglb>0)
{ gen_kom("DAN_","SEGMENT","");
for (i=1; i<=kolglb; i++)
if (tabim[i].vidob==1)
{ sprintf(top,"_%s",tabim[i].imja);
gen_kom(top,"DW","?");
}
gen_kom("DAN_","ENDS","");
}
if (est6_main)
gen_kom("","END","_main");
else gen_kom("","END","");
gen_kom("","","");
fclose(fvh); fclose(fvih);
} return 0;
}
это только одна ф-ция, а еще есть ф-ции:
1 поиск ошибок
2 трансляция ошибок
3 определение лексем
и т.д. и т.п.
в общем около 15 ф-ций
Транслирует лексику почти подобную С++ или С, если кому интересно пишем в приват 
|
|
|