Разработка языка, предназначенного для программирования потоковых вычислений, страница 17

Номер

Метка

Операция

Операнд 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