Программно-методический комплекс для обучения процессу создания компиляторов
Рефераты >> Программирование и компьютеры >> Программно-методический комплекс для обучения процессу создания компиляторов

Продолжение таблицы 10

19

<text-val>

 

$38

<text>

~20

$38

         

20

<text>

 

^string

             

21

<if>

 

IF

$14

<сравнение>

~22

THEN

$15

<body>

~17

ELSE |

$16 | @21,1

<body>

~17

   

22

<сравнение>

 

<factor>

~12

<условие>

~23

<factor>

~12

         

23

<условие>

 

< | > | = | >= | <=| <>

$39|$40|$41|$42|$43|$44

             

24

<while>

 

WHILE

~13

<сравнение>

~22

DO

$10

<body>

~17

       

25

<repeat>

 

REPEAT

$11

<body>

~17

UNTIL

$12

<сравнение>

~22

       

2.4.2 Правила работы с таблицей переходов

Ячейкой возврата является первая ячейка каждой строки, ее описание: X,1, где Х – строка, 1 – столбец.

~x – переход на строку с номером х, столбец №2, формирование адреса возврата в первой ячейке, если переход был осуществлен от одного из параметров условий ИЛИ, то формирование адреса возврата и адреса перехода при ошибке (отрицательном результате).

| – элемент ИЛИ, предпочтение отдается более левому элементу. Перебором сравнивается каждый элемент, и если не один не подошел, то ошибка.

$x – в таблице переходов – номер строки в таблице терминальных символов

$x,y – в формируемой таблице переходов – одна из трех таблиц (x=1 – терминальных символов, x=2 –идентификаторов, x=3 – литер);

+id – таблица идентификаторов (№2) в таблице переходов.

Элементы, начинающиеся со знака ^ (int, real, string) в таблице переходов являются элементами таблицы литералов (№3).

@x,y,z – переход в строку x, столбец y, параметр z

@x,y,z%a,b,c – переход в строку x, столбец y, параметр z (при наличии элемента ИЛИ), при наличии ошибки в a,b,c (указывается только в ячейках возврата, формируется только при присутствии элемента ИЛИ)

Переход по ошибке (значение после знака % в ячейке возврата) действует только для ячеек столбца №2.

Алгоритмы:

Используются таблицы Table_Perehod[i,j], Table_Perehod1[i1,j1]

Table_Perehod –основная таблица перехода

Table_Perehod1 – формируемая таблица перехода

[i,j] – адреса ячеек внутри Table_Perehod, i – столбцы, j – строки

[i1,j1] – адреса ячеек внутри Table_Perehod1, i1 – столбцы, j1 – строки

count_vs – счетчик перемещения, показывающий текущее положение в таблице выходных символов (Tabl_vs);

pos – номер позиции в ячейке (при наличии элемента ИЛИ).

Таблица №1 – таблица терминальных символов.

Таблица №2 – таблица символических имен (идентификаторов).

Таблица №3 – таблица литералов.

Просмотр осуществляется слева направо, и по переходам. Каждый раз происходит сравнение с текущим элементом из таблицы выходных символов.

При положительном результате сравнения (терминальных символов, идентификаторов, литер), осуществляется переход на более правую ячейку.

При отрицательном результате (err=1), обработка происходит в следующей последовательности:

1) если в ячейке возврата текущей строки нет знака %, то err:=0;

2) если параметр единственный (нет ИЛИ элемента) или это последний элемент последовательности ИЛИ, и в ячейке возврата текущей строки нет знака %, то генерировать ошибку «Должен быть элемент % в позиции %%», где % либо терминальный символ (или его код), либо “идентификатор”, либо “литера”; %% – позиция в таблице выходных символов;

3) при наличии нескольких параметров (разделенных элементом ИЛИ) и если текущий не последний из них, то перейти на следующий параметр, более правый, значение переменной err присвоить значение 0;

4) если номер столбца текущей ячейки – 2, то если в ячейке возврата есть знак %, то перейти по адресу, указанному за знаком % и:

- в таблице переходов очистить ячейку возврата,

- в формируемой таблице переходов удалить последнюю строку.

2.4.3 Правила таблицы переходов для написания программы

Если ячейка пуста, то осуществляется переход на первую ячейку текущей строки, i:=1.

Если значение в ячейке типа x,y или x,y,z, то необходимо перейти на строку х, ячейку y, позицию z. При этом: после перехода в указанную ячейку на указанную позицию ячейка с адресом перехода, если она является ячейкой возврата, очищается (Table_Perehod[i,j]:=’’; i:=y; j:=x; pos:=z), в формируемой таблице переходов происходит переход в ячейку, указанную в первой ячейке строки без очищения ее значения (i1:=y; j1:=x).


Страница: