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: | |
;# | ;# | ||||
# | # |
|
|