Лабораторная работа
.docxЛабораторная работа №3 Харисова Р.Р.
char *tabsl[6]= { "" ,"if", "int", "return", "while", "do" };
enum tipleks tipsl[6]={ ident,ifsl,intsl,retsl,whilesl,dosl };
long int st2[27]=
{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,
32768,65536,131072,262144,524288,1048576,2097152,4194304,
8388608,16777216,33554432,67108864};
else if (leksema==dosl) /*DO - оператор цикла */
{ tipop=5;
chleks();
nmet=++kmet; nmet1=++kmet;
sprintf(top,"CC_%d:",nmet); gen_kom(top,"","");
operator(mlvoz);
chleks();
if(leksema == whilesl)
{ chleks();
sprintf(top,"CC_%d:",nmet1); gen_kom(top,"","");
if (leksema==lskob)
{ virag(st2[pskob]|noper|mlvoz); /* выpажение-условие */
gen_kom("","POP","AX");
gen_kom("","TEST","AX,AX");
sprintf(top,"CC_%d",nmet); gen_kom("","JNZ",top);
sprintf(top,"CC_%d",++kmet1); gen_kom("","JMP",top);
sprintf(top,"CC_%d:",kmet); gen_kom(top,"","");
}
else oshibka(5); /* тpебуется ( */
} }