105
Для наглядного отображения полученных грамматик используют синтаксические деревья, пример показан на рисунке 3.
На основе введенных значений формируемой таблицы переходов в программу SINAN строится (формируется) синтаксическое дерево (дерево грамматического разбора).
Деревья могут быть представлены в вертикально как показано на рисунке 5, а и горизонтально - рисунок 5, б.
Рассмотрим выражение: a := c - (1 + b)
а)
б)
Рисунок 5 - а) вертикальное дерево, б) горизонтальное дерево
Рисунок 6 - Горизонтальное синтаксическое дерево
На рисунке 6 показано горизонтальное синтаксическое дерево, построенное по следующей программе:
PROGRAM prog1;
VAR a,b:INTEGER;
s:STRING;
BEGIN
b:=78;
s:='Дерево';
WRITE(s);
a:=b*(2+a);
END.
Пример неправильно написанных элементов программы.
VAR
A,B,C:INTEGER;
C,D:REAL - повторное описание переменной C
A:=3.5; - присвоение переменной целого типа вещественного значения
B:=A/2; - присвоение переменной целого типа вещественного значения, образующегося при делении
D:=F*5; - не описана переменная F
FOR A:=1 TO D DO C:=C+A - переменная D вещественного типа
L - имя в таблице символов. Значение его - адрес перехода. Основная проблема при реализации этого оператора - определение адреса перехода.
<операнд1> <операнд2> BRZ|$BRM|$BRP|$BRMZ|$BRPZ
<операнд1> - значение арифметического выражения,
<операнд2> - номер или место позиции (адрес).
$BRZ - переход по значению 0,
$BRM - переход по значению <0,
$BRP - переход по значению >0,
$BRMZ - переход по значению <=0,
$BRPZ - переход по значению >=0.
Реализация циклов не вызывает сложностей. Имея оператор безусловного перехода и условный оператор, можно сконструировать цикл "вручную". Например, цикл вида
FOR I=N1 TO N2 DO operator
может быть сконструирован на исходном языке:
I := N1;
L1: IF I>N2 THEN GOTO L2;
operator;
I:=I+1;
GOTO L1;
L2:
Представление конструкции FOR I=N1 TO N2 DO operator в виде тетрад показано в таблице 15.
Таблица 15 - конструкция for в виде тетрад
Выражения
Тетрады (четверки)
I:=N1
:=
N1
I
L1
IF I>N2 THEN GOTO L2
(IF N2-I<0 THEN GOTO L2)
-
$BRM
N2
L2
T1
operator
I:=I+1
+
1
GOTO L1
$BR
Далее рассмотрены циклы WHILE, REPEAT, а также конструкция IF…THEN…ELSE.
В таблице 16 разобрана конструкция WHILE a<b DO operator.
Таблица 16 - Конструкция while
IF a-b>0 THEN
GOTO L2
$BRP
a
b
В таблице 17 разобрана конструкция REPEAT operator UNTIL a<b
Таблица 17 - Конструкция repeat
IF a-b<0 THEN
В таблице 18 разобрана конструкция IF a>b THEN operator1 ELSE operator2.
Таблица 18 - Конструкция if
operator1
GOTO L3
operator2
L3
В связи с тем, что разрабатываемый комплекс программ для учебных целей, программа, реализованная на данном этапе незначительна по объему и сложности, является некоммерческой, для определения трудоемкости принимаем коэффициент пересчета Кпер = 0,1.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15