3.8. Восходящие распознаватели.
В основе работы восходящего распознавателя лежит операция сворачивания или свертки, которая применяется к цепочке, полученной с помощью правого вывода. Эта операция является противоположной выводу. Она заключается в том, что правая часть правила заменяется левой частью. При работе входящий распознаватель переносит символы входной цепочки в магазин и, когда в магазине оказывается правая часть какого-либо правила, осуществляет операцию свертки. Эту операцию можно определить следующим образом.
Определение. Пусть задана грамматика Г, в схеме которой имеется правило
r =A®y и задана цепочка g = r1A r2. Если правая часть цепочки
правила r является частью цепочки , то можно получить цепочку
t = r1y r2 , заменяя правую часть правила грамматики левой частью.
В этом случае говорят, что цепочка tt получается путем
непосредственного сворачивания цепочки g и используют
обозначение
t <= g .
Определение. Если существует множество цепочек W = ( w1, w2, ...wn ),
таких, что w1 Ü w2 , w2 Ü w3 , ... , wn-1Ü wn ,
то говорят, что цепочка wn сворачивается в цепочку w1 и
используют обозначение
w1 *Ü wn .Задача распознавания принадлежности данной цепочки языку, порождаемому грамматикой Г, может быть сформулирована следующим образом. Если из заданной цепочки с помощью операции сворачивания можно получить начальный символ грамматики, то такая цепочка может быть построена с помощью правил заданной грамматики, и, следовательно, она принадлежит языку, порождаемому этой грамматикой.
Например, сворачивание цепочки, полученной с помощью правого вывода и правил следующей грамматики
Г3. 11 :
(1) <I> ® a,
(2) <I> ®
(<I><R>
,
(3) <R> ®
,<I><R>
,
(4) <R> ® ).
можно представить так:
(a,a) Ü 1 (<I>,a) Ü 1 (<I>,<I>) Ü 4
(<I>,<I><R> Ü 3(<I><R> Ü 2 <I>.
Каждый
шаг рассмотренной процедуры связан с выделением в цепочке правой части
какого-либо правила и заменой его левой частью правила. В последовательности
сворачиваний правые части правил называются основой
рассматриваемой цепочки. В общем случае основу можно определить так:
Определение. Основой цепочки называют
вхождение правой части последнего |
Работу магазинного автомата, выполняющего распознавание приведенной цепочки, можно представить в виде:
Магазин |
Вход |
Действие |
1. h0 |
(a,a)^ |
Перенос |
2. h0( |
a,a)^ |
Перенос |
3. h0(a |
,a)^ |
Свертка(1) |
4. h0(<I> |
,a)^ |
Перенос |
5. h0(<I>, |
a)^ |
Перенос |
6. h0(<I>,a |
)^ |
Свертка(1) |
7. h0(<I>,<I> |
)^ |
Перенос |
8. h0(<I>,<I>) |
^ |
Свертка(4) |
9. h0(<I>,<I><R> |
^ |
Свертка(3) |
10. h0(<I><R> |
^ |
Свертка(2) |
11. h0<I> |
^ |
Допустить |
В этом примере на каждом шаге применяется либо операция переноса, либо сворачивания, параметром которой является номер правила, а работа автомата заканчивается, когда в магазине получается начальный символ грамматики. При этом автомат вырабатывает сигнал, показывающий, что цепочка допускается автоматом.
Расширенный магазинный автомат
Рассмотренный пример показывает, что автомат, выполняющий операцию свертки, в отличие от нисходящего распознавателя, не строит в магазине вывод цепочки, начиная с аксиомы грамматики, который соответствует построению синтаксического дерева цепочки "сверху - вниз", а выполняет сворачивание символов, записанных в магазин. Такой порядок сворачивания символов, записанных в магазин, соответствует правому выводу цепочки, выполняемому "снизу - вверх". Это обстоятельство объясняет, почему такие распознаватели называются восходящими. Подобный распознаватель должен учитывать при переходе не один символ, расположенный в вершине магазина, а цепочку символов. Чтобы устранить отмеченное противоречие, определим новый тип автомата, который назовем расширенным магазиннным автоматом.
Определение.
Формальное определение такого автомата имеет вид:M = {P, S, H, F, s0, h0, d},где
P - входной алфавит,
S - алфавит состояний,
s0- начальное состояние , s0 ÎS,
F - множество конечных состояний, F является подмножеством S,
H - алфавит магазинных сисмволов, записываемых на вспомогательную ленту,
h0 - маркер дна, он всегда записывается на дно магазина, h0 Î H,
d: S * {P È {$}} * H* ® S*H* - функция переходов.
В функциональном виде функции переходов расширенного автомата можно записать так:
d(s, p, ga) = (s, gb),где a, b, g Î H*, p Î (P È {$}) и s Î S.
Приведенное определение показывает, что расширенный автомат допускает замену одной цепочки, находящейся в вершине автомата, другой цепочкой.
Используя введенное ранее определение конфигурации автомата, работу расширенного магазинного автомата можно представить в виде последовательности сменяющих друг друга конфигураций. При этом начальная и конечная конфигурации имеют вид:(s0, a, h0 ) и (s1, $, h0I ),
где a - заданная цепочка, s1 - одно из заключительных состояний автомата, I - начальная аксиома грамматики.
Цепочку и язык, допускаемые расширенным автоматом, можно определить так.
Определение.
Цепочка допускается расширенным автоматом, если
существует последовательность конфигураций,
первая из которых является начальной конфигурацией
с заданной цепочкой, а последней конфигурацией в
последовательности является одна из
заключительных конфигураций.
( s0, a, h0 ) , $|--* ( s1, h0I ),где s1 - одно из заключительных состояний,
a - заданная цепочка.Определение.
Язык, допускаемый расширенным автоматом, можно
определить так:L(M) = { a | (s0, a, h0 ) |--* ( s1, $,$ ) и s1ÎF}.
Пример работы расширенного магазинный автомат
В качестве иллюстрации работы расширенного автомата рассмотрим автомат, допускающий язык L={wwR | w Î {a, b}*}.
M3.2: P = {a, b}, S = {s0, s1}, H = {a, b, <I>, h0}, F = {s1} ,
d(s0, a, h0) = (s0, h0a), d(s0, a, <I>) = (s0, <I>a),
d(s0, b, h0) = (s0, h0b), d(s0, b, <I>) = (s0, <I>b),
d(s0, a, a) = (s0, aa), d*(s0, a, a<I>a) = (s0, <I>),
d(s0, b, a )= (s0, ba), d*(s0, b, a<I>a) = (s0, <I>),
d(s0, a, b) = (s0, ab), d*(s0, a, b<I>b) = (s0, <I>),
d(s0, b, b) = (s0, bb), d*(s0, b, b<I>b) = (s0, <I>),
d*(s0, a, aa) = (s0, <I>), d*(s0, $, a<I>a) = (s0, <I>),
d*(s0, b, aa) = (s0, <I>), d*(s0, $, b<I>b) = (s0, <I>),
d*(s0, a, bb) = (s0, <I>), d*(s0, $, h0<I>) = (s1, $).
d*(s0, b, bb) = (s0, <I>),Это недетерминированный автомат. Если на входе задана цепочка abba, то его работу можно представить в виде следующего ряда конфигураций:
№
Вход
Магазин
Состояние
1.
abba|-
h0
s0
2.
bba|-
h0a
s0
3.
ba|-
h0ab
s0
4.
a|-
h0abb
s0
5.
a|-
h0a<I>
s0
6.
|-
h0a<I>a
s0
7.
|-
h0<I>
s1
Пред.Страница След.Страница Раздел Содержание