{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)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.