Номер |
Метка |
Операция |
Операнд 1 |
Операнд 2 |
Результат |
0 |
== |
0 |
x51 |
tmp_30 |
|
1 |
GF |
Label0_9 |
tmp_30 |
_null |
|
2 |
let |
0 |
_null |
out1 |
|
3 |
GO |
Label1_9 |
_null |
_null |
|
4 |
Label0_9: |
> |
0 |
x51 |
tmp_31 |
5 |
GF |
Label0_10 |
tmp_31 |
_null |
|
6 |
let |
1 |
_null |
out1 |
|
7 |
GO |
Label1_10 |
_null |
_null |
|
8 |
Label0_10: |
let |
0.5 |
_null |
out1 |
9 |
Label1_10: |
_null |
_null |
_null |
_null |
10 |
Label1_9: |
* |
x52 |
2 |
tmp_32 |
11 |
+ |
1 |
tmp_32 |
tmp_33 |
|
12 |
/ |
tmp_33 |
8 |
tmp_34 |
|
13 |
* |
tmp_34 |
x52 |
tmp_35 |
|
14 |
let |
tmp_35 |
_null |
new |
|
15 |
== |
0 |
new |
tmp_36 |
|
16 |
GF |
Label0_11 |
tmp_36 |
_null |
|
17 |
let |
0 |
_null |
out2 |
|
18 |
== |
5 |
x51 |
tmp_37 |
|
19 |
GF |
Label0_12 |
tmp_37 |
_null |
|
20 |
let |
5 |
_null |
out3 |
|
21 |
Label0_12: |
GO |
Label1_11 |
_null |
_null |
22 |
Label0_11: |
< |
0 |
new |
tmp_38 |
23 |
GF |
Label0_13 |
tmp_38 |
_null |
|
24 |
let |
0.5 |
_null |
out2 |
|
25 |
GO |
Label1_13 |
_null |
_null |
|
26 |
Label0_13: |
let |
1 |
_null |
out2 |
27 |
Label1_13: |
_null |
_null |
_null |
_null |
28 |
Label1_11: |
_null |
_null |
_null |
_null |
2vars2
Номер |
Метка |
Операция |
Операнд 1 |
Операнд 2 |
Результат |
0 |
let |
3 |
_null |
c |
|
1 |
let |
3 |
_null |
d |
После завершения работы синтаксического анализатора, в котором была осуществлена проверка программы на часть семантических ошибок, сформирована постфиксная запись, последовательность пентад, таблица связей и таблицы идентификаторов и констант, начинает работу интерпретатор.
Он выбирает готовый к исполнению блок и производит исполнение операций заложенных в последовательность пентад этого блока. Сначала производится исполнение последовательности пентад блоков типа vars. А затем всех готовых к исполнению блоков.
После обработки каждого блока производится передача данных по таблице связи от переменных данного блока другим блокам. Строки таблицы связей по которым была осуществлена передача данных удаляются из таблицы связей. Это необходимо для определения готовности к исполнению блоков типа do. Если этот блок не упоминается в таблице связей в качестве приёмника результата, значит он готов к исполнению. Иначе, выполняются другие готовые блоки. Если готовых к исполнению блоков не осталось, то работа интерпретатора заканчивается, и выводятся результаты.
Подробное описание алгоритма работы интерпретатора слишком велико, поэтому ограничусь результатами обработки предложенной тестовой программы.
Исполнение последовательности пентад блоков vars
1vars1
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.