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

Если значение в ячейке типа x,y%a,b,c, при этом err=1 и номер столбца равен 2 (i=2), то следует перейти по ссылке a,b,c, очистить ячейку возврата таблицы переходов (Table_Perehod[i,j]:=’’; i:=b; j:=a; pos:=c), в формируемой таблице переходов перейти по адресу возврата и удалить последнюю строку (i1:=y; j1:=x).

Если значение в ячейке типа x,y%a,b,c, и err=0, то перейти по ссылке x,y, в формируемой таблице переходов перейти по адресу, указанному в текущей ячейке.

Если номер столбца текущей ячейки = 3 и err<>0, то в ячейке возврата удалить при наличии знак % и значения за ним.

Если первый символ ^ – значение в ячейке является литерой (таблица литералов – №3). Осуществляемая при этом проверка: если в таблице выходных символов № текущей таблицы равен 3 (if Tabl_vs[count_vs,2]=’3’), то занести в текущую ячейку формируемой таблицы № таблицы (3) и № строки в ней (Table_Perehod1[i1,j1]:=$3,№строки), перейти на следующую ячейку (i:=i+1; i1:=i1+1; count_vs:=count_vs+1). В случае отрицательного результата сравнения переменной err присваивается значение 1.

Если первый символ $ – значение в ячейке является терминальным символом (таблица терминальных символов – №1). Осуществляемая проверка: если в таблице выходных символов № текущей таблицы равен 1 (if Tabl_vs[count_vs,2]=’1’), то занести в текущую ячейку формируемой таблицы № таблицы (1) и № строки в ней (Table_Perehod1[i1,j1]:=$1,код), перейти на следующую ячейку (i:=i+1; i1:=i1+1; count_vs:=count_vs+1). В случае отрицательного результата сравнения переменной err присваивается значение 1.

Если первый символ ~ – это переход на вторую ячейку строки с номером, указанным за символом ~, в формируемой таблице переходов добавляется новая строка и переход осуществляется на нее. При этом осуществляется следующее: в первую ячейку (ячейку возврата) указанной строки заносится адрес возврата: если переход осуществляется с одной из позиций с элементом ИЛИ и не является последним в списке, то в ячейке возврата формируется код возврата типа x,y,z, где x – номер строки, y – номер столбца, z – номер позиции откуда был произведен переход (x:=j; y:=i; z:=pos; j:=a; i:=2, где а номер строки в адресе перехода – ~a), тоже происходит и в формируемой таблицей переходов (x:=j1; y:=i1; j1:=№последней строки; i1:=2).

Коды терминальных символов показаны в таблице 11.

Таблица 11 – Таблица кодов терминальных символов

Код

Терминальный символ

Комментарий

   

1

PROGRAM

объявление программу

   

2

VAR

объявление переменных

   

3

BEGIN

начало тела

   

4

END

конец тела

   

5

INTEGER

тип целое

   

6

REAL

вещественный тип

   

7

STRING

строковый тип

   

8

FOR

цикл с параметром – ДЛЯ

   

9

TO

цикл с параметром – ДО

   

10

DO

ВЫПОЛНИТЬ

   

11

REPEAT

цикл с постусловием – ПОВТОРЯТЬ

   

12

UNTIL

цикл с постусловием – ПОКА НЕ

   

13

WHILE

цикл с предусловием – ПОКА

   

14

IF

условный оператор – ЕСЛИ

   

15

THEN

условный оператор – ТО

   

16

ELSE

условный оператор – ИНАЧЕ

   

17

DIV

делить на цело

   

18

WRITE

вывести на консоль

   

19

READ

считать с консоли

   

20

DOWNTO

цикл с параметром – ДО

   

21

FUNCTION

функция

   

22

PROCEDURE

процедура

   

23

{

начало комментария

   

24

}

конец комментария

   

25

[

открытие квадратных скобок

   

26

]

закрытие квадратных скобок

   

27

;

конец операции

   

28

:=

присвоить значение

   

29

,

разделитель

   

30

.

конец программы/отделение дробной части

   

31

:

разделение идентификатора от его типа

   

32

+

оператор сложения

   

33

-

оператор вычитания

   

34

*

оператор умножения

   

35

(

открывающаяся скобка

   

36

)

закрывающаяся скобка

   

37

/

оператор деления

   

38

΄

кавычка

   

39

<

меньше

   

40

>

больше

   

41

=

равно

   

42

>=

больше или равно

   

43

<=

меньше или равно

   

44

<>

не равно

   


Страница: