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