Методы трансляци
04 Октября 2010, автор: пользователь скрыл имя
Описание работы
Транслятор с псевдоязыка на Си
Файлы: 1 файл
отчет Методы трансляции.doc
— 99.00 Кб (Скачать файл)Программа на выходном языке (подмножество языка С) 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;
}
Результат работы:
Список литературы
- Гордеев А. В., Молчанов А. Ю. Системное программное обеспечение. – СПб.: издательство «Питер», 2001. – 736 с.
- Доннелли
Чарльз, Столлмен Ричард. Bison. – http://www.opennet.ru/docs/
RUS/bison_yacc/bison_toc.html - Мартин Браун.
Создание анализаторов текста при помощи
yacc и lex. –http://www.ibm.com/
developerworks/ru/edu/au- lexyacc/index.html - Свердлов С. Введение в методы трансляции: учебное пособие. – Вологда: издательство «Русь», 1994. – 80с.
- Свердлов С. З. Языки программирования и методы трансляции: учебное пособие. – СПб.: издательство «Питер», 2007. – 640с.