Асемблери. Принципи написання та функціонування компіляторів програм, страница 7

                                     lab1->next=lab2;

                                     lab1=lab2;

                                     break;

                      }         }}}

int segsearch(char *buf)

{

   int a=0,s=0;   u1=u;

   while (u1->next!=NULL){

                   if (a>0) u1=u1->next;

                   if (strcmp(u1->segmname,buf)==0) {

               s++;         break;}        a++;    }

  return s;}

void AnalizEnd(char *str)

{

   char s=0,buf[15];int i=0,x=0,f=0,rez;

   clearbuf;

   while(s!='\n'){

               s=str[i++];

               if (s!=' ' && s!='\n' && s!='\0'){

                      buf[x++]=s;}

               else {

                  if (s!='\0'){   clearbuf;x=0;}

                  else break;    }}    lab1=lab;q=0;

                   if (strcmp(lab1->label,buf)==0){ //если в buf метка

                   f++;}

    while (lab1->next!=NULL){

                if (q==2) lab1=lab1->next;

                               if (q==1) q++;

                               rez=strcmp(lab1->label,buf);

                               if (q==0) {lab1=lab1->next;q++;}

                   if (rez==0) {f++;break;}}

                   if (f==0){   int er=1;error(er,buf,str); }}

void error(int er,char *buf,char *str)

{  switch (er) {

     case 0: fprintf(file_w,"  %s%d%s\n","**ERROR**(",nstr,"): Несоответствие типов !!!");     break;

     case 1: int sw=6;int w;print(sw,str,k1,w);

                    fprintf(file_w,"  %s%d%s%s%s\n","**ERROR**(",--nstr,"): неизвестное имя ",buf," !!!");

                    break;

     case 2: sw=6;print(sw,str,k1,w);

                    fprintf(file_w,"  %s%d%s\n","**ERROR**(",--nstr,"): некорректная инструкция.");     break;

     case 3: fprintf(file_w,"  %s%d%s%s%s\n","**ERROR**(",nstr,"): переменная '",buf,"' уже существует.");   break; }}

void CodeCmp(char *str)

{  unsigned char w;

  int sw=0;  k1=k;  progon();

do {

    if (f1==12){

               w=genbyte2(str);

               z++;sw=1;print(sw,str,k1,w);break;}

    if (f2<4 && k1->op1<4 && k1->op1!=0){

      if (f3>10 && k1->op2>10){

                z++;w=genbyte2(str);sw=5;

                print(sw,str,k1,w);break; } }

    if (f2<4 && k1->op1<4 && k1->op1!=0) {

      if (f3<9 && k1->op2<9){

                z++;w=genbyte2(str);sw=5;

                print(sw,str,k1,w);break;}}

    if (f2>4 || k1->op1>4){

      if (f3==10 && k1->op2==10){

               z++;sw=2;print(sw,str,k1,w);break;}}

    if (f2>4 && f2!=9 && k1->op1!=9){

      if (k1->op1>4 && k1->op2!=10){

               if ((f3>4 && f3!=10 ) && (k1->op2>4 && f3!=10)){

                z++; w=genbyte2(str);

                sw=3; print(sw,str,k1,w); break;}}}

     if (f2==9){

                 if(k1->op1==9){

                    if(f3>4 || k1->op2>4){       z++;

                      w=genbyte2(str);

                      sw=4;print(sw,str,k1,w);break; }}}

     if (f2>4 && f2!=9){

                  if (k1->op1>4 && f2<10){

                    if (f3<4  && k1->op2<4){

                     z++;sw=5;

                     AnalizRegister(str);

                     w=genbyte2(str);

                     print(sw,str,k1,w);break;}}}

     if (f2>9 && f2!=9){

                  if (k1->op1>9){

                    if (f3<4  && k1->op2<4){

                     z++;sw=5;

                     AnalizRegister(str);

                     w=genbyte2(str);

                     print(sw,str,k1,w);break;}}}

     if (z==0) k1=k1->next;

 }

 while(z!=1); z=0;}

void progon()

{

  int q=1;

  while (k1->com!=NULL){

     if (f1!=q){

                   q++;    k1=k1->next;}

     else break;   }}

void AnalizRegister(char *str)

{  loadreg;int a=0,z=0,c=0,j=0,x=0,i;

  unsigned char s=0,buf[15],fd[5];