шины стека заменяются на левую часть правила, либо когда имеется несколько правил с одинаковой правой частью, для ко-
торой требуется выполнить свертку. Для учета выбранных альтернатив алгоритму потребуется второй стек.
Построение расширенного МП автомата по заданной КС-грамматике. Алгоритм позволяет построить расширенный
МП-автомат, выполняющий правосторонний разбор. Стек используется для размещения левой части текущей сентенциаль-
ной формы, в начале он пуст (используется особый маркер #), вершина стека справа. На каждом шаге автомат замещает не-
терминалом строку верхних символов стека в соответствии с правилами грамматики или помещает в стек очередной вход-
ной символ. Автомат обладает только одним состоянием и имеет одно заключительное состояние, в котором стек пуст. Дано:
КС-грамматика G=(T,N,P,S). Строится расширенный МПА M=(Q,A,Z,δ, q
0
, z
0
, F), такой, что L(M)=L(G).
1. Q={q, r}; q
0
=q; F={r}; Z=T∪N∪{#},A=T,z
0
=#.
2. ∀p
i
∈P: X→β, X∈N, β∈V
*
⇒ δ(q,λ,β)=δ(q,λ,β)∪(q,X). Эти функции позволяют замещать на нетерминал правую часть
правила, находящуюся на вершине стека
3. ∀a∈T ⇒δ(q,a,λ)=(q,a). Эти функции помещают очередной символ в стек, если только в нем не находится правая часть
какого-либо правила и перемещают читающую головку.
4. δ(q,λ,#S)=(r,λ). Добавляется функция для перевода автомата в заключительное состояние.
Пример. G=({+,(,),i},{E,F},P,E). P={E→F+E | F; F→(E) | i};
1. Q={q,r}; q
0
=q; A={+,(,),i}; Z={+,(,),i,E,F,#}; z
0
=#; F=r;
2. 1. δ(q,λ,F+E)=∪(q,E); 2. δ(q,λ,F)=∪(q,E); 3. δ(q,λ,(E))=∪(q,F); 4. δ(q,λ,i)=∪(q,F);
3. 5. δ(q,+,λ)=(q,+); 6. δ(q,(,λ)=(q,(); 7. δ(q,),λ)=(q,)); 8. δ(q,i,λ)=(q,i);
4. 9. δ(q,λ,#E)=(r,λ).
Пусть автомат распознает цепочку (i), тогда изменение конфигураций по тактам следующее :
(q,(i),#) ⇒
6
(q,i),#)) ⇒
8
(q,),#(i)⇒
4
(q,),#(F) ⇒
2
(q,),#(E)⇒
7
(q,λ,#(E)) ⇒
3
(q,λ,#F) ⇒
2
(q,λ,#E) ⇒
9
(r,λ). Строка принята, т.к. ав-
томат в заключительном состоянии и магазин пуст. В этот раз не возникало никаких неопределенностей.
Построение МП автомата по НФ Грейбах. Алгоритм позволяет построить недетерминированный МП-автомат. Стек ис-
пользуется для размещения правой части текущей сентенциальной формы, в начале это аксиома. Вершина стека слева. Ав-
томат обладает только одним состоянием и принимает входную строку опустошением стека. Дано: КС-грамматика
G=(T,N,P,S) в НФ Грейбах. Строится недетерминированный МПА M=(Q,A,Z,δ, q
0
, z
0
, F), такой, что L(M)=L(G).
1. Q={q}; q
0
=q; F=∅; Z=N,A=T,z
0
=S.
2. ∀p
i
∈P: X→bα, b∈T, X∈N, α∈N
*
⇒ δ(q,b,X)= δ(q,b,X)∪(q,α). Эти функции позволяют замещать нетерминал на вершине
стека на цепочку.
Пример. G=({+,(,),i},{E,F,G},P,E). P={E→(EFGE | iGE | (EF | i ; F→); G→+};
1. Q={q}; q
0
=q; F=∅; A={+,(,),i}; Z={E,F,G}; z
0
=E;
2. 1. δ(q,(,E)=∪(q,EFGE); 2. δ(q,i,E)=∪(q,GE); 3. δ(q,(,E)=∪(q,EF); 4. δ(q,i,E)=∪(q,λ); 5. δ(q,),F)=∪(q,λ); 6. δ(q,+,G)=∪(q,λ);
Или иначе: δ(q,(,E)={(q,EFGE), (q,EF)}; δ(q,i,E)={(q,GE), (q,λ)}; δ(q,),F)= (q,λ); δ(q,+,G)= (q,λ);
Пусть автомат распознает цепочку (i), тогда изменение конфигураций по тактам следующее:
(q,(i),E) ⇒
?1
(q,i),EFGE) ⇒
?2
(q,),GEFGE) ⇒
?-
(q,i),EFGE)⇒
?4
(q,),FGE) ⇒
5
(q,λ,GE) ⇒
?-
(q,i),EFGE)⇒
?-
(q,(i),E) ⇒
?3
(q,i),EF) ⇒
?2
(q,),GEF) ⇒
?-
(q,i),EF) ⇒
?4
(q,),F) ⇒
5
(q,λ,λ). Строка принята, т.к. автомат в заключительном состоянии и магазин пуст.
Распознаватели без возвратов. Распознаватели без возвратов основаны на определении метода, по которому выбирается
одна из возможных альтернатив. Остальные альтернативы при этом не рассматриваются. Время работы такого алгоритма
обладает не экспоненциальной, а линейной зависимостью от длины входной цепочки, что позволяет использовать алгоритм
для значительно более широкого спектра практических задач. Такие алгоритмы могут потребовать дополнительных ограни-
чений на правила грамматики.
Нисходящий распознаватель S-грамматики. КС-грамматика G(N,T,P,S) называется S-грамматикой, если ее правила удов-
летворяют следующим требованиям:
1. ∀p
i
∈P: A→aβ, A∈N, a∈T, β∈V
*
; т.е. правая часть правил начинается с терминала,
2. ∀p
i
∈P: A→ a
1
β
1
| a
2
β
2
| … | a
n
β
n
, A∈N, a
i
∈T, β
i
∈V
*
, a
i
≠a
j
, i,j=1, 2,..., n; i≠j; т.е. правые части правил, определяющие один и
тот же нетерминал, начинаются с разных терминалов.
Первое свойство S-грамматики обеспечивает выбор очередного правила грамматики, а второе делает этот выбор однознач-
ным, позволяя построить детерминированный распознаватель. Реализовать разбор можно различными методами. В алгорит-
ме разбора по методу рекурсивного спуска для каждого нетерминала А грамматики G строится процедура разбора, полу-
чающая на вход цепочку символов α и положение считывающей головки i (номер символа). Если для символа А определено
более одного правила, процедура ищет среди них правило, первый символ правой части которого бы совпадал с текущим
символом входной цепочки. Если такого нет, то цепочка не принимается. Если правило найдено, то запоминается его номер,
считывающая головка передвигается, и для каждого нетерминала правой части рекурсивно вызывается процедура разбора
этого нетерминала. Другие методы позволяют обойтись без рекурсии и обрабатывать входную строку в цикле. Наличие на
входе S-грамматики достаточное, но не необходимое условие. Т.е. и иная произвольная КС-грамматика может задавать язык,
распознаваемый методом рекурсивного спуска, однако не существует алгоритма, позволяющего это проверить. Кроме того,
не существует и алгоритма, позволяющего проверить, преобразуется ли произвольная КС-грамматика в S- грамматику, и
алгоритма, выполняющего такое преобразование. В общем случае исключение λ-правил, левой рекурсии, цепных правил,
выполнение левой факторизации могут способствовать приведению грамматики к требуемому виду, но не гарантируют это-
го. Алгоритм распознавания S-грамматики просты и эффективны, но имеют ограниченную применимость, поскольку только
узкий класс грамматик отвечает заданным требованиям.
Распознаватель для S-грамматики строится следующим образом (вершина стека слева):