Для искомого автомата имеем:
M3: P = {a, + , * , ) , ( },
H = {E , T , F , a , + , x , ) , h0 , ( }, S = {s0
}, F = {s0}
Для всех правил грамматики строим команды типа (1):
(1) f0
(s0 , e , E) = {(s0 ,
T+E) ; (s0 , T)},
(2) f0
(s0 , e , T) = {(s0 ,
F*T) ; (s0 , F)},
(3) f0
(s0 , e , F) = {(s0 ,
)E( ) ; (s0 , a)},
Для всех терминальных символов строим команды типа (2):
(4) f ( s0, a, a ) = (
s0, $ ),
(5) f ( s0 , + , + ) =
(s0 , $ ),
(6) f ( s0 , * , * ) =
(s0 , $ ),
(7) f ( s0 , ( , ( ) =
(s0 , $ ),
(8) f ( s0 , ) , ) ) =
(s0 , $ ),
Для перехода в конечное состояние построим команду:
(9) f (s0 , e
, h0) = ( s0 , $ ).
Построенный автомат является недетерминированным.
Начальную конфигурацию с цепочкой a + a*a запишем так: (s0 ,
a+a*a , h0E).
Последовательность тактов работы построенного автомата, показывающая,
что заданная цепочка допустима, имеет вид:
(s0 , a+a*a , h0E) |--
(s0 , a+a*a , h0T+E) |--
(s0 , a+a*a , h0T+T) |--
(s0 , a+a*a , h0T+F) |--
(s0 , a+a*a , h0T+a) |--
(s0 , +a*a , h0T+) |--
(s0 , a*a , h0T) |--
(s0 , a*a , h0F*T) |--
(s0 , a*a , h0F*F) |--
(s0 , a*a , h0F*a) |--
(s0 , *a , h0F* ) |--
(s0 , a , h0F) |--
(s0 , a , h0a) |--
(s0 , $ , h0) |--
(s0 , $ , $).
Отметим, что последовательность правил, используемая построенным автоматом,
соответствует левому выводу входной цепочки:
E Ю E+T
Ю
T+T Ю
F+T Ю a+T
Ю a+T*F
Ю a+F*F
Ю a+a*F
Ю a+a*a.
Если по такому выводу строить дерево, то построение будет происходить
сверху вниз, т.е. от корня дерева к листьям.
Такой способ построения дерева по заданной цепочке называется нисходящим.
Магазинные автоматы называют часто распознавателями, поскольку они
определяют, является ли цепочка, подаваемая на вход автомата, допустимой
или нет, и следовательно, отвечают на вопрос, принадлежит ли эта цепочка
языку, пораждаемому грамматикой, использованной для построения автомата.
Учитывая характер построения вывода в магазине, автоматы рассмотренного
типа называют нисходящими
распознавателями.
Еще раз подчеркнем , что доказательство допустимости цепочки нисходящим
магазинным автоматом ( НМА) предусматривает поиск определенной последовательности
конфигураций.
Такой поиск может существенно увеличить время работы автомата. Детерминированные
автоматы не требуют поиска и работают быстрее, поэтому именно такие
автоматы применяются на практике. Детерминированные автоматы-распознаватели
могут быть построены не для всех, а только для некоторых видов КС-грамматик.