Автор работы: Пользователь скрыл имя, 04 Октября 2010 в 16:14, Не определен
Транслятор с псевдоязыка на Си
Программа на выходном языке (подмножество языка С) test.c :
#include <stdio.h>
int main()
{
int stack[1000],mem[1000],top=0;
printf("Sokraschenie drobei\n");
printf("Vvedite chislitel'");
scanf("%d",&mem[0]);
printf("Vvedite znamenatel'");
scanf("%d",&mem[1]);
stack[top]=mem[0];
top+=1;
top-=1;
mem[2]=stack[top];
stack[top]=mem[1];
top+=1;
top-=1;
mem[3]=stack[top];
stack[top]=mem[2];
top+=1;
stack[top]=mem[3];
top+=1;
top-=1;
stack[top-1]=stack[top-1]>=
top-=1;
if(stack[top]) goto label0;
stack[top]=mem[3];
top+=1;
stack[top]=mem[2];
top+=1;
top-=1;
stack[top-1]-=stack[top];
top-=1;
mem[4]=stack[top];
goto label1;
label0:
stack[top]=mem[2];
top+=1;
stack[top]=mem[3];
top+=1;
top-=1;
stack[top-1]-=stack[top];
top-=1;
mem[4]=stack[top];
label1:
label3:
stack[top]=mem[4];
top+=1;
stack[top]=0;
top+=1;
top-=1;
stack[top-1]=stack[top-1]>
top-=1;
stack[top]=!stack[top];
if(stack[top]) goto label2;
stack[top]=mem[3];
top+=1;
stack[top]=mem[2];
top+=1;
top-=1;
stack[top-1]=stack[top-1]>=
top-=1;
if(stack[top]) goto label4;
stack[top]=mem[2];
top+=1;
stack[top]=mem[3];
top+=1;
top-=1;
stack[top-1]-=stack[top];
top-=1;
mem[2]=stack[top];
goto label5;
label4:
stack[top]=mem[3];
top+=1;
stack[top]=mem[2];
top+=1;
top-=1;
stack[top-1]-=stack[top];
top-=1;
mem[3]=stack[top];
label5:
stack[top]=mem[2];
top+=1;
stack[top]=mem[3];
top+=1;
top-=1;
stack[top-1]=stack[top-1]>=
top-=1;
if(stack[top]) goto label6;
stack[top]=mem[3];
top+=1;
stack[top]=mem[2];
top+=1;
top-=1;
stack[top-1]-=stack[top];
top-=1;
mem[4]=stack[top];
goto label7;
label6:
stack[top]=mem[2];
top+=1;
stack[top]=mem[3];
top+=1;
top-=1;
stack[top-1]-=stack[top];
top-=1;
mem[4]=stack[top];
label7:
goto label3;
label2:
stack[top]=mem[0];
top+=1;
stack[top]=mem[2];
top+=1;
top-=1;
stack[top-1]/=stack[top];
top-=1;
mem[0]=stack[top];
stack[top]=mem[1];
top+=1;
stack[top]=mem[2];
top+=1;
top-=1;
stack[top-1]/=stack[top];
top-=1;
mem[1]=stack[top];
printf("NOD=");
stack[top]=mem[2];
top+=1;
top-=1;
printf("%d",stack[top]);
printf("\ndrob' \n");
stack[top]=mem[0];
top+=1;
top-=1;
printf("%d",stack[top]);
printf("\\");
stack[top]=mem[1];
top+=1;
top-=1;
printf("%d",stack[top]);
return 0;
}
Результат работы:
Список литературы