Решение. 5. Управляющая таблица представлена в табл

1. Q= {q};q0=q;F= 2. ={if,then,else,z,p,;,#}

3. Г= {U,K,H,M,O,#,;,[x3]} 4. Z0= U#

5. Управляющая таблица представлена в табл. 5.2.2

6. Пояснения к заполнению табл. 5.2.2:

а) правило 1 — помещаем 3(К,),П в позицию (U, if);
правило 2 — помещаем 3(Н,[х0]),П в позицию (K, р);
правило 3 — помещаем З((ОМ[х3];),[х1]), в позицию (H, then);
правило 4 — помещаем З (О,[х2]),П в позицию (М, else);

б) правило 6 — помещаем 3 (U,) в позицию (О, z);

в) правило 5 — помещаем И в позицию (М,;);

г) правило 7 — помещаем И ([х0]), П в позицию (О, z).

7. Пояснения к завершению заполнения табл. 5.2.2;

а) помещаем И(), П в позицию (;,;);

б) помещаем И([xз]) во все позиции строки [xз];

в) помещаем В в позицию (#, #);

г) помещаем О во все свободные позиции таблицы.

Таблица 5.2 Управляющая таблица

  if then else z р ; #
U 3(К,),П О О О О О 0
K О О О О 3(О,[х2]),П O 0
H О 3((0М[х3]; [x1]),П О O О O 0
M О О 3(О,[х2]),П О О И() 0
О 3(U,) О О И[х0]),П O O 0
; О О О О О И(),П 0
3] И([x3])
# О O O О O 0 B
                         

Задача Используя МП - преобразователь из предыдущей задачи, вы­полнить перевод оператора ifp1 then z1 else z2; в ОПЗ.

Прежде всего обратим внимание на то, что помимо магазина наш МП -преобразователь работает со стеком меток. Решение пред­ставим в табл. 5.2.3, предусмотрев в ней колонки для отображения номера шага преобразования, содержимого магазина, содержимого входной строки и записей в выходную строку преобразователя. Магазин изображается так, что его вершина расположена слева. Текущий символ входной строки также находится слева. Выход­ная строка формируется слева направо. Кроме того, для наглядности предусмотрены колонки для показа операционного символа, являющегося активным на текущем шаге перевода (колонка "операция"), и для представления стека меток (вершина стека слева).

На каждом шаге работы преобразователя выделяется пара (символ в магазине, текущий входной символ) и выполняются действия, определенные содержимым соответствующей позиции таблицы и активным операционным символом. На выходе пре­образователя получена строка р1т2УПЛz1т1БПт1:z2т2:, котораяпредставляет собой ПОЛИЗ исходного оператора и может быть ис­пользована для генерации машинного кода или интерпретации.

Таблица 5.3 Перевод условного оператора в ОПЗ

Шаг перевода Магазин Входная строка Стек меток Операция Запись в выходную строку
  U# if P1 then z1 else z2 #      
  K# P2 then z2 else z2;#   [x0] Р1
  ## then z1 else z2; # m1: [x1] т1 УПЛ
  OM[x3];# z1 else z2;# m1: [x0] Z1
  М[х2];# else z1;# m1: [x2] m2 БПm1:
  О[х3];# z2;# m2: [x0] z2
  [x3];# ;# m2: 3] т2:
  ;# ;#      
  # #      

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: