
- •Курсовая работа
- •Содержание
- •Введение
- •1 Постановка задачи
- •2 Формальная модель задачи
- •Цепочка, которая не содержит ни одного символа, называется пустой цепочкой и обозначается .
- •Цепочка , для которой существует выводS*, называется сентенциальной формой или сентенцией в грамматике .
- •Расширение допускает единственное -правило вида s, но в этом случае начальный символ грамматики s не должен встречаться в правых частях правил.
- •2.1 Расширенные Формы Бэкуса – Наура
- •Операции языка:
- •Правила, определяющие идентификатор, букву и цифру:
- •Правило, определяющее оператор программы (пятая цифра варианта).
- •2.2 Формальные грамматики
- •2.3 Диаграммы Вирта
- •3 Спецификация основных процедур и функций
- •3.1 Лексический анализатор
- •3.2 Синтаксический анализатор
- •3.3 Семантический анализатор
- •3.4 Генерации внутреннего представления программы
- •Перевод в полиз операторов. Каждый оператор языка программирования может быть представлен как n-местная операция с семантикой, соответствующей семантике оператора.
- •Составной оператор {s1; s2;...; Sn } в полиЗе записывается как s1 s2... Sn.
- •3.5 Интерпретатор программы
- •4 Структурная организация данных
- •4.1 Спецификация входной информации
- •4.2 Спецификация выходной информации
- •5 Разработка алгоритма решения задачи
- •6 Установка и эксплуатация программного средства
- •7 Работа с программным средством
- •Заключение
- •Список использованных источников
- •Приложение а
- •Приложение б Примеры программ на модельном языке
- •Приложение в Цепочка вывода и дерево разбора
- •Приложение г Примеры таблиц идентификаторов и двуместных операций
- •Приложение д полиз и интерпретация программы
- •Здесь используются следующие обозначения:
- •Приложение е Контрольный пример
- •Приложение ж Список ошибок, выводимых программой
- •Приложение з Текст программы
Приложение д полиз и интерпретация программы
Интерпретируем следующую программу:
{
i,n,f:integer;
read(n);
f as 1;
for i as 1 to n do f as f*I;
write(f)
}
ПОЛИЗ данной программы будет иметь вид:
Таблица 14 – ПОЛИЗ исходной программы
Лексема |
n |
R |
f |
1 |
= |
i |
1 |
= |
i |
n |
(n, k) |
(5,2) |
(2,15) |
(5,3) |
(3,1) |
(2,5) |
(5,2) |
(3,1) |
(2,5) |
(4,1) |
(4,2) |
Номер |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Продолжение таблицы 14
Лексема |
<= |
25 |
!F |
f |
F |
i |
* |
= |
i |
i |
1 |
(n, k) |
(2,2) |
(0,25) |
(2,14) |
(5,3) |
(4,3) |
(4,1) |
(2,3) |
(2,5) |
(5,1) |
(4,1) |
(3,1) |
Номер |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
Продолжение таблицы 14
Лексема |
+ |
= |
8 |
! |
F |
W |
|
|
(n,k) |
(2,1) |
(2,5) |
(0,8) |
(2,13) |
(4,3) |
(2,16) |
|
|
Номер |
21 |
22 |
23 |
24 |
25 |
26 |
|
|
Здесь используются следующие обозначения:
(0,…) –лексема указывает на метку перехода;
(2,…) – лексема содержится в таблице ограничителей;
(3,…) – лексема содержится в таблице чисел;
(4,…) – лексема содержится в таблице переменных;
(5,…) – лексема содержится в таблице адресов переменных;
Процесс интерпретации программы на модельном языке М, записанной в форме ПОЛИЗа, показан в таблице 15.
Таблица 15 – Ход интерпретации ПОЛИЗа программы
Стек |
Текущий элемент ПОЛИЗа |
Операция |
Таблицы переменных | |
адреса |
значения | |||
пуст |
0 |
адрес n - в стек |
1) i 2) n 3) f |
1) - 2) - 3)- |
2 |
1 |
значение 3 - в стек |
1) i 2) n 3) f |
1) - 2) - 3)- |
2;3 |
2 |
присвоить 2-му элементу таблицы число 3 |
1) i 2) n 3) f |
1) - 2) 3 3)- |
пуст |
3 |
адрес f - в стек |
1) i 2) n 3) f |
1) - 2) 3 3)- |
3 |
4 |
значение 1 - в стек |
1) i 2) n 3) f |
1) - 2) 3 3)- |
3;1 |
5 |
присвоить 3-му элементу таблицы число 1 |
1) i 2) n 3) f |
1) - 2) 3 3)1 |
пуст |
6 |
адрес i - в стек |
1) i 2) n 3) f |
1) - 2) 3 3)1 |
1 |
7 |
значение 1- в стек |
1) i 2) n 3) f |
1) - 2) 3 3) 1 |
1;1 |
8 |
присвоить 1-му элементу таблицы число 1 |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
пуст |
9 |
значение переменной 1 - в стек |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
1 |
10 |
значение переменной 2 - в стек |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
1;2 |
11 |
в стек – true, т.к. 1<=3 |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
true |
12 |
метка 25 - в стек |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
true;25 |
13 |
переход, к следующему элементу ПОЛИЗа, т.к. условие истинно |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
пуст |
14 |
адрес f- в стек |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
3 |
15 |
значение переменной f- в стек |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
3;1 |
16 |
значение переменной i- в стек |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
Продолжение таблицы 15
3;1;1 |
17 |
извлечь из стека 1 и 1 и поместить в стек их произведение |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
3;1 |
18 |
присвоить 3-му элементу таблицы число 1 |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
пуст |
19 |
адрес i- в стек |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
1 |
20 |
значение переменной i - в стек |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
1;1 |
21 |
число 1 – в стек |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
1;1;1 |
22 |
извлечь из стека 1 и 1 и поместить в стек их сумму |
1) i 2) n 3) f |
1) 1 2) 3 3)1 |
1;2 |
23 |
присвоить 1-му элементу таблицы число 2 |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
пуст |
24 |
метка 8 в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
8 |
25 |
переход к элементу ПОЛИЗа, с номером, извлекаемым из вершины стека |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
пуст |
8 |
значение переменной i - в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
2 |
9 |
значение переменной n - в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
2;3 |
10 |
в стек – true, т.к. 2<=3 |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
true |
11 |
метка 25 – в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
true;25 |
12 |
переход, к следующему элементу ПОЛИЗа, т.к. условие истинно |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
пуст |
13 |
адрес переменной f - в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
3 |
14 |
значение переменной f - в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
3,1 |
15 |
значение переменной i - в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
Продолжение таблицы 15
3,1,2 |
16 |
Перемножение верхних элементов стека |
1) i 2) n 3) f |
1) 2 2) 3 3)1 |
3,2 |
17 |
Запись значения в адрес 3 |
1) i 2) n 3) f |
1) 2 2) 3 3)2 |
пуст |
18 |
адрес i- в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)2 |
1 |
19 |
значение переменной i - в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)2 |
1,2 |
20 |
число 1 – в стек |
1) i 2) n 3) f |
1) 2 2) 3 3)2 |
1,2,1 |
21 |
извлечь из стека 2 и 1 и поместить в стек их сумму |
1) i 2) n 3) f |
1) 2 2) 3 3)2 |
1,3 |
22 |
Запись значения в адрес 1 |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
пуст |
23 |
метка 8 в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
8 |
24 |
переход к элементу ПОЛИЗа, с номером, извлекаемым из вершины стека |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
пуст |
8 |
значение переменной i - в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
3 |
9 |
значение переменной n - в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
3,3 |
10 |
в стек – true, т.к. 3<=3 |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
true |
11 |
метка 25 – в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
true,25 |
12 |
переход, к следующему элементу ПОЛИЗа, т.к. условие истинно |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
пуст |
13 |
адрес переменной f - в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
3 |
14 |
значение переменной f - в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
3,2 |
15 |
значение переменной i - в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
3,2,3 |
16 |
Перемножение верхних элементов стека |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
3,6 |
17 |
Запись значения в адрес 3 |
1) i 2) n 3) f |
1) 3 2) 3 3)6 |
Продолжение таблицы 15
пуст |
18 |
адрес i- в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)6 |
1 |
19 |
Значение переменной i - в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)6 |
1,3 |
20 |
число 1 – в стек |
1) i 2) n 3) f |
1) 3 2) 3 3)6 |
1,3,1 |
21 |
извлечь из стека 3 и 1 и поместить в стек их сумму |
1) i 2) n 3) f |
1) 3 2) 3 3)2 |
1,4 |
22 |
Запись значения в адрес 1 |
1) i 2) n 3) f |
1) 4 2) 3 3)2 |
пуст |
23 |
метка 8 в стек |
1) i 2) n 3) f |
1)4 2) 3 3)6 |
8 |
24 |
переход к элементу ПОЛИЗа, с номером, извлекаемым из вершины стека |
1) i 2) n 3) f |
1) 4 2) 3 3)6 |
пуст |
8 |
Значение переменной i - в стек |
1) i 2) n 3) f |
1) 4 2) 3 3)6 |
1 |
9 |
Значение переменной n - в стек |
1) i 2) n 3) f |
1) 4 2) 3 3)6 |
1,4 |
10 |
в стек – false, т.к. 4 >3 |
1) i 2) n 3) f |
1) 4 2) 3 3)6 |
false |
11 |
метка 25 – в стек |
1) i 2) n 3) f |
1) 4 2) 3 3)6 |
25 |
12 |
переход, к элементу 25 из стека, т.к. условие ложно |
1) i 2) n 3) f |
1) 4 2) 3 3)6 |
пуст |
25 |
Значение переменной f - в стек |
1) i 2) n 3) f |
1) 4 2) 3 3)6 |
6 |
26 |
вывести на экран число из верхушки стека |
1) i 2) n 3) f |
1) 4 2) 3 3)6 |