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

                                    {temp=st[st.size()-1]; st.pop_back(); print(temp);}

                        st.push_back(n);

            }

            if(n==22 || n==39) // =

            {

                        if(n==22 && info) print(a1,b1,c1);

                        while(st[st.size()-1]!=53)

                                    {temp=st[st.size()-1]; st.pop_back(); print(temp);}

                        st.push_back(n);

            }

            if(n==18) // возможность инициализации

            {

                        info=1; a1=a; b1=b; c1=c;

                        Var.setinit(Var.getname(b,c)); // объявление переменной

                        if(Var.getinit(b,c)>1) fprintf(error2,"Redefinition: %s\n", Var.getname(b,c)); // переобъявление

            }

            else info=0;

            if(n==32 || n==38) // проверка объявлений переменных

                        if(Var.getinit(b,c)==0) fprintf(error2,"Undeclared identifier: %s\n", Var.getname(b,c));

            if(n==12 || n==27 || n==41 || n==45) // конец постфиксной записи и начало новой

            {

                        while(temp!=53) {temp=st[st.size()-1]; st.pop_back(); if(temp!=53) print(temp);} // выводим все операции, которые остались в стеке

                        st.push_back(53); // начало новой постфиксной записи

                        fprintf(postfix, "\n");

                        if(n==45) Stack.push_back(100); // чтобы узнать, когда while закончится

            }

}

void main()

{

            main1();

            int a,b,c,k, err=0, n=1;

            in2=fopen("token.txt","r");

            error2=fopen("error2.txt","w");

            if (in==NULL) {fprintf(error2, "sourse file not found!"); return;}

            postfix=fopen("postfix.txt","w");

            init();

            Stack.push_back(0);

            st.push_back(53); // начало постфиксной записи

            fscanf(in2,"%d%d%d",&a,&b,&c); // считываем первый терм

            do {

                        k=find(n,a,b,c); // проверяем терм

                        if (k) // если терм допустим в текущем элементе таблицы

                        {

                                    if (tab[n].accept) // если принят, то обработать и считать новый

                                    {

                                               post(n,a,b,c); // построение постфиксной записи

                                               fscanf(in2,"%d%d%d",&a,&b,&c);

                                    }

                                    if (tab[n].stack) Stack.push_back(n+1); // положить в стек

                                    if (tab[n].ret) // взять из стека

                                    {

                                               n=Stack[Stack.size()-1];

                                               Stack.pop_back();

                                               if (n==100) // конец while

                                               {

                                                           print(49); fprintf(postfix, "\n");

                                                           n=Stack[Stack.size()-1];

                                                           Stack.pop_back();

                                               }

                                    }

                                    else n=tab[n].jump; // иначе перейти по указателю

                        }

                        else if (tab[n].err==0) n++; //если недопустимость терма в текущем элементе таблицы не является ошибкой

                        else if (n==15) {n=Stack[Stack.size()-1]; Stack.pop_back();}

                        else // ошибка

                        {

                                    err=1;

                                    if (tab[n].n==1)