Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство образования Российской Федерации
Кафедра САПР
Отчет по лабораторной работе №4
по дисциплине: «Лингвистические средства ВС»
Выполнил: Уваров Н.А., БВТ-21
Проверила: Коробова И. Л.
Тамбов 2012
Задание:
Написать программу генерации объектного кода.
Отрывок программы:
READ (H, B, M);
PI : = 3.14;
V : = PI * H * ( B * B + M * M + B * M ) / 3
Кодировочная таблица:
Символы |
|
Read |
1 |
( |
2 |
) |
3 |
, |
4 |
; |
5 |
: = |
6 |
* |
7 |
+ |
8 |
/ |
9 |
Идентификатор |
|
H |
10 1 |
B |
10 2 |
M |
10 3 |
Pi |
10 4 |
V |
10 5 |
Константа |
|
3.14 |
11 1 |
3 |
11 2 |
Результат работы лексического анализатора:
1 2 10 1 4 10 2 4 10 3 3 5
10 4 6 11 1 5
10 5 6 10 4 7 10 1 7 2 10 2 7 10 2 8 10 3 7 10 3 8 10 2 7 10 3 9 11 2
Грамматика:
1 <Список операторов> → <оператор> {;<оператор>}
2 <оператор> → <ввод> / <присваивание>
3 <Ввод> → Read (<список переменных>)
4 <список переменных> → <идентификатор> {,<идентификатор>}
5 <идентификатор> → H / B / M / V / PI
6 <Присваивание> → <идентификатор> : = <арифметическое выражение>
7 < арифметическое выражение > → <слагаемое> {+<слагаемое>}
8 <слагаемое> → <множитель> {*/:<множитель>}
9 <множитель> → (< арифметическое выражение >) / <идентификатор> / <константа>
10 <константа> → 3.14 / 3
Последовательность четверок:
Текст программы:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i,n;
FILE *file=fopen("input.txt", "r");
printf("start:\n");
fscanf(file,"%d\n",&n);
for(i=0;i<n;i++)
{
char oper[100]="\t", op1[100]="\t", op2[100]="\t", res[100]="\t";
fscanf(file,"%s\t%s\t%s\t%s\n", &oper, &op1, &op2, &res);
//printf("%s %s %s %s\n", oper, op1, op2, res);
if(strcmp(oper, ":=")==0)
{
printf("mov %s, %s\n", res, op1);
continue;
}
if(strcmp(oper, "*")==0)
{
printf("mov al, %s\n", op1);
printf("mul %s\n",op2);
printf("mov %s, ax\n", res);
continue;
}
if(strcmp(oper, "+")==0)
{
printf("add %s, %s\n",op1, op2);
printf("mov %s, %s\n", res, op1);
continue;
}
if(strcmp(oper, "/")==0)
{
printf("mov ax, %s\n", op1);
printf("div %s\n",op2);
printf("mov %s, al\n", res);
continue;
}
if(strcmp(oper, "param")==0)
{
printf("write %s\n", op1);
continue;
}
}
printf("end start.");
fclose(file);
_getch();
return 0;
}
Пример работы программы: