Скачиваний:
5
Добавлен:
01.05.2014
Размер:
11.95 Кб
Скачать

part37 Пред.Страница   След.Страница   Раздел   Содержание

3.7 Построение магазинного автомата. Для грамматик, удовлетворяющих условиям LL(1) грамматик,  справедливо следующее утверждение.   Утверждение. Для каждой LL(1) грамматики Г можно построить Детерминированный  магазинный автомат М , допускающий   язык,  порождаемый   данной грамматикой:    L ( Г ) = L ( М ). Задача построения магазинного автомата для заданной LL(1)  грамматики формулируется следующим образом.

Задана грамматика Г = {Vт,Va, I, R}, и требуется определить

об'екты, определяющие автомат М = { P , S , s0 , F , H , h0 , f }.

Учитывая, что автомат должен допускать цепочки языка, порождаемого заданной грамматикой, примем    P = Vт. Чтобы упростить описание автомата, допустим, что он имеет одно состояние s0,     которое является и начальным и заключительным, то есть - S = {s0}и  F = {s0}.

В качестве магазинного алфавита примем следующее объединение: H = {Vт И Va И {h0}}.

Построение функции переходов выполним с использованием  множеств ВЫБОР правил заданной грамматики следующим образом:

1 ) Для каждого правила грамматики, начинающегося терминальным символом вида

     <A> ® b a,    построим команду автомата   f ( s0 , b , <A> ) = ( s0 , a ' ) ,

     где a ' является зеркальным отображением цепочкиa .

2) Для каждого правила грамматики, начинающегося нетерминальным символом вида

     <A> ® <B>a, построим команду автомата   f* ( s0 , x , <A> ) = ( s0 , <B> a ' )  

    где f* - команда автомата без сдвига входной головки,   а a ' является зеркальным

    отображением цепочки a .

Количество команд, которые необходимо построить для заданного   правила, определяется числом элементов множества ВЫБОР.

Команды магазинного автомата, работающие без сдвига входной головки, выполняют замену нетерминаала, соответствующего   левой части правила, цепочкой,  соответствующей правой части   этого правила. В этом случае сопоставление терминального символа, получаемого при выводе, и очередного символа входной цепочки не производится, поэтому для таких команд сдвиг входной  головки не нужен.

3)  Для каждого аннулирующего правила грамматики вида

      <A>® $ построим команды автомата   f* ( s0 , x , <A> ) = ( s0 , $ )  для каждого элемента x из множества ВЫБОР(<A> ® $). Количество таких команд  определяется числом элементов множества    ВЫБОР.

4)  Для каждого терминального символа b, расположенного в   середине или на конце правых

     частей правил грамматики, построим команду

  f ( s0 , b , b ) = ( s0 , $ ). 5) Для перехода в заключительное состояние построим команду   f* ( s0 , e , h0 ) = ( s0 , $ , $ ). В качестве начальной конфигурации автомата условимся использовать следующее выражение с заданной входной цепочкой µ :

  (s0,µ,h0<I>). Пользуясь приведенными правилами, построим магазинный автомат для грамматики Г12, схема которой в символических  обозначениях может быть записана так Г3. 5 :    R = {<A> ® x | (<B>), <B> ® <A> <C>,

<C> ® +<A> <C> | $}. Вначале построим множества ВЫБОР для каждого из правил и проверим, является ли эта грамматика LL(1) грамматикой. (1) ВЫБОР(<A>  ®x) = ПЕРВ(x) = {x} (2) ВЫБОР(<A>  ® ((<B>))) = ПЕРВ((<B>)) = {(} (3) ВЫБОР(<B>  ® <C>) = ПЕРВ(<A><C>) = {x,(} (4) ВЫБОР(<C>  ® +<A><C>) = ПЕРВ(+<A><C>) = {+} (5) ВЫБОР(<C>  ®$) = СЛЕД(<C>)  = СЛЕД(<B>) = { ) }. Множества выбора для правил с символом <A> в левой части и для правил с символом <C> в левой части не имеют общих элементов, следовательно рассматриваемая грамматика относится к классу LL(1) грамматик.

Используя функции ВЫБОР, построим соответствующие им команды искомого автомата. ( 1 ) f ( s0 , x , <A>) = ( s0 , $ ) , ( 2 ) f( s0 , ( , <A> ) = ( s0 , )<B> ) , ( 3 ) f* ( s0 , ( , <B> ) = ( s0 , <C><A> ) ,

        f* ( s0 , x , <B> ) = ( s0 , <C><A> ) , ( 4 ) f ( s0 , + , <C> ) = ( s0 , <C><A> ) , ( 5 ) f* ( s0 , ) , <C> ) = ( s0 , $ ). Учитывая, что закрывающиеся скобки расположены на последнем месте правила (2), построим команду f ( s0 ,  ),  ) ) = ( s0 , $ ) . Кроме того, построим команду для перехода в заключительное состояние: f ( s0 , $ , h0 ) = ( s1 , $ ) . Работу построенного автомата проверим на примере входной цепочки ( x + x ). При этом получаем следующую последовательность конфигураций: ( s0 , (x+x) , h0<A> ) |--- ( s0 , x+x ) , h0)<B> ) |--- ( s0 , x+x) , h0)<C><A> ) |---

( s0 , +x ) , h0)<C>) |--- ( s0 , x) , h0)<C><A> )  |--- ( s0 , ) , h0)<C>)|---

( s0 , $ , h0 ) |--- ( s0 , $ , $ ) , которая показывает, что входная цепочка допускается построенным автоматом. Пред.Страница   След.Страница   Раздел   Содержание

Соседние файлы в папке Формальные языки, грамматики и автоматы