Активная цепочка может рассматриваться как программа управления работой МП-преобразователя. Прежде чем посмотреть, как это происходит, обратимся к методике построения МП-преобразователя по транслирующей грамматике. Затем получим, преобразователь для Т-грамматики условного оператора и проследим работу преобразователя.
Рассматриваемая входная грамматика условных операторов (см. табл. 5.2.1) относится к классу LL(1)-грамматик. Поэтому вполне естественно вести здесь речь о построении преобразователя, подходящего для такого класса грамматик. Наш МП - преобразователь будет использовать нисходящую стратегию анализа, он будет также детерминированным. Методика построения МП - распознавателя для LL(1)-грамматик была рассмотрена ранее. Повторим здесь полностью все пункты указанной методики с учетом особенностей, которые привносит в нее Т-грамматика.
Прежде всего, сохраним, по возможности, обозначения подпрограмм в управляющей таблице преобразователя:
- 3 (
,
) - Замена символа в вершине магазина строкой
и запись в выходную строку части перевода, соответствующей цепочке
операционных символов.
- П - перемещение указателя входной строки на одну позицию вправо.
- И(
) - Исключение символа из вершины магазина и вывод в выходную строку части перевода, соответствующей цепочке
операционных символов.
- О - Обнаружение Ошибки в программе и завершение работы.
- В - Выход, нормальное завершение работы.
Если один из аргументов подпрограммы 3 отсутствует, сохраняем разделяющую запятую. При отсутствии единственного аргумента подпрограммы И пишем И(). Теперь дадим пункты методики построения ДМП-преобразователя М = (Q,
, Г,
,
, q0, Z0, F) с одним состоянием по Т-грамматике GT = (VT, VN,
, R, S), входная грамматика G = (VT, VN, Р, S) которой обладает свойством LL(1)-грамматик.
1.Q={q};q0= q;F= 
2.
= VT
{#}, # — концевой маркер входной строки.
3. Г= VN
{#}
{t\ t
VT,(A ->
t
)
Р,
V+,
V*} 
{r\r
, (А- >
1B
2 r
3)
R, B
VN;
1
2,
3
(V
)*}, где
t - не головной символ в правой части правила;
r - операционный символ, слева от которого в правой части правила имеется хотя бы один нетерминал;
# — маркер дна магазина.
4. Z0 = S#, S располагается в вершине магазина.
5. Заготовить управляющую таблицу преобразователя со строками Z
Г и столбцами а
(одну, так как состояние одно).
6.Последовательно проанализировать правила Т-грамматики и заполнить позиции (Z, а) таблицы обозначениями подпрограмм преобразователя:
а) 3(
,fg), П —для правила вида Z->fag
, где Z
VN,a
VT, f,g
*;
{V
}* и h1(
)
V, т.е. головной символ строки
не должен быть операционным;
б) 3(
, f)—для правила вида Z-> f
и всех a
D S(Z,
), где f
*;
= A
, Z,A
V N;
{ V
}*,
;DS (Z,
) вычисляется по правилам входной грамматики G;
в) И(f)—для правил вида Z -> f и всех a
DS(Z,
), где Z
V N ;
f
*, а
; DS(Z,
) вычисляется по грамматике G;
г) И(fg),П —для правил вида Z-> fag, где Z
VN,а
VT;f, g
*.
7. Завершение заполнения позиций (Z, д) таблицы обозначениями подпрограмм преобразователя:
а) И(), П — для всех позиций Z = а, где Z,a
VT;
б) И — для всех позиций строки Z
;
в) В — для позиции Z = а = #;
г) О — для всех оставшихся пустыми позиций.
Теперь формируются заготовки текстов сообщений об ошибках, и на этом разработка МП-преобразователя завершается.
Задача Построить МП-преобразователь по транслирующей грамматике условных операторов






