Основы трансляции. Рыбанов А.А. - 16 стр.

UptoLike

Составители: 

16
2) Таблица идентификаторов 3) Таблица констант
номер
константа
1
0
2
5
3
1
В языке МИЛАН имеются операторы, изменяющие линейный порядок
вычислений. Это операторы цикла и развилки. Для организации правильных
вычислений необходимо на некоторые лексемы поставит ссылки на номера
лексем, куда будет передано управление при выполнении определенных
условий. Такие ссылки будем записывать на место значения лексемы.
Для оператора цикла на лексему DO необходимо поставить ссылку $r -
номер лексемы, следующей за лексемой ENDDO. На эту лексему будет
передано управление, если условие цикла - ложь. Для лексемы ENDDO
поставить ссылку $s - номер лексемы WHILE, увеличенный на 1. Это лексема,
с которой начинается условие цикла. На нее передается управление после
выполнения тела цикла (рис. 7, а).
Для оператора развилки на лексему IF необходимо поставить ссылку $r -
номер лексемы, стоящей после лексемы ELSE в полной форме оператора
развилки (рис. 7, б), и стоящей после лексемы ENDIF в сокращенной форме
(рис. 7, в). На эти лексемы передается управление при ложном условии
оператора развилки.
Рис. 7. Расстановка ссылок
Пример №2: После расстановки ссылок в последовательности лексем
примера №1 изменяться две лексемы: 14 - (2, 31) и 30 - (7, 11).
Алгоритм расстановки ссылок в общем случае должен обрабатывать
вложенные структуры циклов и развилок. Для такой обработки необходимо
использовать два независимых стека: один для циклов WHILE, другой для
развилок IF. Синтаксическая диаграмма (R-схема) расстановки ссылок
представлена на рис 8.
Для описания семантических функций синтаксической диаграммы
расстановки ссылок введем обозначения:
- $Tab_Lexems[..]->Code - массив номеров лексем;
номер
идентификатор
1
x
2
n
3
z
  2) Таблица идентификаторов                3) Таблица констант
    номер   идентификатор                     номер      константа
       1          x                             1              0
      2           n                             2              5
      3           z                             3              1

   В языке МИЛАН имеются операторы, изменяющие линейный порядок
вычислений. Это операторы цикла и развилки. Для организации правильных
вычислений необходимо на некоторые лексемы поставит ссылки на номера
лексем, куда будет передано управление при выполнении определенных
условий. Такие ссылки будем записывать на место значения лексемы.
   Для оператора цикла на лексему DO необходимо поставить ссылку $r -
номер лексемы, следующей за лексемой ENDDO. На эту лексему будет
передано управление, если условие цикла - ложь. Для лексемы ENDDO
поставить ссылку $s - номер лексемы WHILE, увеличенный на 1. Это лексема,
с которой начинается условие цикла. На нее передается управление после
выполнения тела цикла (рис. 7, а).
   Для оператора развилки на лексему IF необходимо поставить ссылку $r -
номер лексемы, стоящей после лексемы ELSE в полной форме оператора
развилки (рис. 7, б), и стоящей после лексемы ENDIF в сокращенной форме
(рис. 7, в). На эти лексемы передается управление при ложном условии
оператора развилки.




                            Рис. 7. Расстановка ссылок
   Пример №2: После расстановки ссылок в последовательности лексем
примера №1 изменяться две лексемы: 14 - (2, 31) и 30 - (7, 11).
   Алгоритм расстановки ссылок в общем случае должен обрабатывать
вложенные структуры циклов и развилок. Для такой обработки необходимо
использовать два независимых стека: один для циклов WHILE, другой для
развилок IF.    Синтаксическая диаграмма (R-схема) расстановки ссылок
представлена на рис 8.
   Для описания семантических функций синтаксической диаграммы
расстановки ссылок введем обозначения:
   - $Tab_Lexems[..]->Code - массив номеров лексем;
                                       16