Розробка програми-препроцесора, що виконує розбір тексту (Звіт з лабораторної роботи № 8), страница 6

                               {

                                cmdbuf[0]=0;

                                goto macrogets;

                               }

                               goto begin;

                             }

                           }

                            else

                              {

                                  if (flag)

                                  {

                                     fprintf(F1,"\t%10i                 \t%-s",number,cmdbuf);

                                     flag=0;

                                     if ((index > 0) && (index < macrotab[cmdidx].str_count))

                                     {

                                      cmdbuf[0]=0;

                                      goto ifgets;

                                     }

                                    goto begin;

                                   }

                               fprintf(F3,cmdbuf);

                               fprintf(F1,"\t%10i %6.4X  %s %.2X    \t%-s",number,offs,mnem[opcode],n,cmdbuf);

                               offs=offs+operandcount[opcode];

                               if ((index > 0) && (index < macrotab[cmdidx].str_count))

                               {

                                cmdbuf[0]=0;

                                opcode=find_macro(lexbuf);

                                goto macrogets;

                               }

                               goto begin;

                              }

                           }

                              if (op1num % 2)

                              op2num=op2num+8;

                               if (flag)

                               {

                                 fprintf(F1,"\t%10i                   \t%-s",number,cmdbuf);

                                 flag=0;

                                 if ((index > 0) && (index < macrotab[cmdidx].str_count))

                                     {

                                      cmdbuf[0]=0;

                                      goto ifgets;

                                     }

                                 goto begin;

                               }

                              fprintf(F3,cmdbuf);

                              fprintf(F1,"\t%10i %6.4X  %s %c%c     \t%-s",number,offs,mnem[opcode],cop1[op1num],cop2[op2num],cmdbuf);

                            offs=offs+operandcount[opcode];

                            if ((index > 0) && (index < macrotab[cmdidx].str_count))

                            {

                                cmdbuf[0]=0;

                                goto macrogets;

                            }

                            goto begin;

                  }

              while(parsetyp);

  printf("\n");

 }

 fclose(F);

 runlist:

 fprintf(F1,"\n\n===================table of segment=========================");

 for (index=0;index<i;index++)

   fprintf(F1,"\n\t   %10s  %4.4X",segtab[index].name,segtab[index].length);

 fprintf(F1,"\n\n====================symbol table=============================");

 for (index=0;index<j;index++)

   fprintf(F1,"\n\t   %10s%10s%10s%.4X",symtab[index].mnem,symtab[index].type,symtab[index].atrib,symtab[index].ef_adr);

 for (index=0;index < k;index++)

   fprintf(F1,"\n\t   %10s%10s%10s%.4X",labeltab[index].mnem,labeltab[index].type,labeltab[index].atrib,labeltab[index].ef_adr);

 fprintf(F1,"\n\n=========================macro table===============================");

 for (index =0;index < idx ;index++)

   fprintf(F1,"\n\t%25s",macrotab[index].name);

 fclose(F1);

 fclose(F2);

 fclose(F3);

}

Висновок: був вивчений принцип роботи препроцесору, а саме робота директив условної компіляції, директив визначення макросів, включення файлів користувача, обробка команд макросів.