Проектировании транслятора (язык проектирования Си++) с языка Си++ на язык Ассемблер (Лабораторная работа № 1-4), страница 11

            tab[69].terms[0]=1; tab[69].terms[1]=0; tab[69].terms[2]=0;

            tab[69].n=1; tab[69].jump=0; tab[69].accept=1; tab[69].stack=0; tab[69].ret=1; tab[69].err=1;

            tab[70].terms[0]=1; tab[70].terms[1]=0; tab[70].terms[2]=1;

            tab[70].n=1; tab[70].jump=0; tab[70].accept=1; tab[70].stack=0; tab[70].ret=1; tab[70].err=1;

            tab[71].terms[0]=1; tab[71].terms[1]=0; tab[71].terms[2]=3;

            tab[71].n=1; tab[71].jump=0; tab[71].accept=1; tab[71].stack=0; tab[71].ret=1; tab[71].err=1;

            tab[72].terms[0]=1; tab[72].terms[1]=0; tab[72].terms[2]=4;

            tab[72].n=1; tab[72].jump=0; tab[72].accept=1; tab[72].stack=0; tab[72].ret=1; tab[72].err=1;

            tab[73].terms[0]=1; tab[73].terms[1]=0; tab[73].terms[2]=5;

            tab[73].n=1; tab[73].jump=0; tab[73].accept=1; tab[73].stack=0; tab[73].ret=1; tab[73].err=1;

            tab[74].terms[0]=1; tab[74].terms[1]=0; tab[74].terms[2]=6;

            tab[74].n=1; tab[74].jump=0; tab[74].accept=1; tab[74].stack=0; tab[74].ret=1; tab[74].err=1;

}

4.4

#include <stdio.h>

#include <vector>

#include "laba3.cpp"

using namespace std;

struct four

{

            int first[3];

            int second[3];

            int result[3];

            int op;

} Four;

struct oper

{

            int a,b,c;

} Oper;

vector<oper> operand;

vector<int> labels;

FILE *postfix1, *out;

void printdata(int *a)

{

            if (a[0]==2) fprintf(out,"%s", Var.end[a[1]][a[2]].data);

            else if (a[0]==3) fprintf(out,"%d", Con.end[a[1]][a[2]].data);

            else fprintf(out,"res%d", a[2]);

}

void printd(int *a)

{

            if (a[0]==2) fprintf(out,"%s", Var.end[a[1]][a[2]].data);

            else if (a[0]==3) fprintf(out,"%d", Con.end[a[1]][a[2]].data);

            }

void main()

{

            main2();

            int a,b,c, i,j,k, n=6, lab=0, stat=0;

            char str[200];

//          char temp;

            postfix1=fopen("postfix.txt","r");

            out=fopen("proga1.txt","w");

            fprintf(out,"MODEL SMALL\n");                    

            fprintf(out,"DATASEG\n\n");

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

                        for (j=0; j<Var.end[i].size(); j++)

                                    fprintf(out,"%s\tDW\t0\n", Var.end[i][j].data); // печатаем инициализации переменных из таблицы

            for (i=0; i<3; i++) fprintf(out,"res%d\tDW\t0\n", i); // промежуточные переменные

            fprintf(out,"\nCODESEG\n");

            fprintf(out,"START:\n");

            fprintf(out,"MOV ax,@data\n");

            fprintf(out,"MOV ds,ax\n");

            fprintf(out,"MOV es,ax\n\n");

            i=0;

            do{

                        fgets(str,200,postfix1);

                        k=sscanf(str, "%d%d%d", &a, &b, &c); // считывание терма

            }while (k<=0 && !feof(postfix1));

            while(!feof(postfix1)) // Главный цикл

            {         

                        if (a==0 && b==0 && c==1) // начало цикла(while)

                        {

                                    lab+=2; // две метки на цикл

                                    labels.push_back(lab-1); // добавляем в стек

                                    labels.push_back(lab);  // номера меток для цикла

                                    fprintf(out,"label%d:\n", lab-1);

                        }

                        if (a==1 && b==0 && c==10) // конец цикла(})

                        {

                                    fprintf(out,"jmp label%d\n", labels[labels.size()-2]);

                                    fprintf(out,"label%d:\n", labels[labels.size()-1]);