Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
trans.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
1.07 Mб
Скачать

9.4.1 Построение нисходящего автомата

Рассмотренные понятия и методы их использования приводят к небольшой корректировке правил порождения АМП по S-грамматике, чтобы получить процедуру создания автомата по q-грамматике. Эта корректировка касается только пункта 5. Можно, конечно, полностью переписать исправленный алгоритм создания автомата, но лучше воспользуемся авторским текстом [16]. Пятое правило заменяется двумя следующими:

5.1. Правило грамматики применяется всякий раз, когда магазинный символ является его левой частью, а входной символ принадлежит его множеству выбора. Для того чтобы применить правило вида:

A,

используется переход:

Заменить (αr), Сдвиг

Если правило имеет вид:

Ab,

то используется:

Вытолкнуть, Сдвиг.

Для того чтобы применить правило:

A

используется переход

Вытолкнуть.

5.2. Если имеется правило с нетерминалом A в левой части и элемент, соответствующий магазинному A и входному символу b не был создан по правилу 5.1, то таким элементом может быть или применение пустого правила (Aα ) или операция «Отвергнуть».

9.4.2 Примеры построения амп по q-грамматике

Построим автомат с магазинной памятью по q-грамматике, используемой выше для различных иллюстраций. Его таблица переходов будет иметь следующий вид.

Магазинные символы

Входные символы

a

b

c

S

SA,

,

Отвергнуть

Отвергнуть

A

SA,

Отвергнуть

Отвергнуть

Отвергнуть

Отвергнуть

Допустить

Следующий пример иллюстрирует использование правила 5.2, когда описанное в нем ячейка таблицы переходов может быть реализована любым из двух вариантов (для определенности выберем второй). Грамматика G9.5(S) описывается следующими правилами:

1. S → aA

2. S → b

3. A → cSa

4. A →

Множества выбора для каждого из правил будут выглядеть следующим образом:

ВЫБОР(1) = ВЫБОР (S → aA) = {a}

ВЫБОР(2) = ВЫБОР (S → b) = {b}

ВЫБОР(3) = ВЫБОР (A → сSa) = {c}

ВЫБОР(4) = ВЫБОР (A → ) = СЛЕД (A) = {a, }

Полученные данные использованы для построения таблицы переходов. Ячейка, содержащая альтернативные правила, находится на пересечении строки с магазинным символом A и столбце с входным символом b.

Магазинные символы

Входные символы

a

b

c

S

A,

,

Отвергнуть

Отвергнуть

A

1) или 2)Отвергнуть

aS,

a

,

Отвергнуть

Отвергнуть

Отвергнуть

Отвергнуть

Отвергнуть

Отвергнуть

Допустить

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

Номер шага

Содержимое стека

Остаток входной цепочки

Применяемый переход

Комментарий

1

S

ab┤

A,

2

A

b┤

Использовано выталкивание

3

b┤

Отвергнуть

Все равно отвергли

Во втором варианте цепочка отвергается уже на втором шаге.

Номер шага

Содержимое стека

Остаток входной цепочки

Применяемый переход

Комментарий

1

S

ab┤

A,

2

A

b┤

Отвергнуть

На шаг раньше

Распознавание вложенности скобок и q-грамматика

Теперь у нас достаточно знаний для построения простой грамматики, порождающей вложенные скобки. Данная q-грамматика содержит следующие правила:

S → (B)B

B → B)B

B →

Правила выбора выглядят следующим образом:

ВЫБОР(1) = ВЫБОР (S → (B)B ) = {(}

ВЫБОР(2) = ВЫБОР (B → B)B ) = {(}

ВЫБОР(3) = ВЫБОР (B → ) = СЛЕД (B) = {), }

Они лишний раз подтверждают, что мы построили q-грамматику. Следует специально отметить, что, начиная с q-грамматики, далее постоянно приходиться доказывать принадлежность грамматики заданному классу, чтобы затем использовать необходимые процедуры построения автомата. Таблица переходов данного автомата будет выглядеть следующим образом:

Магазинные символы

Входные символы

(

)

S

B)B,

Отвергнуть

Отвергнуть

B

B)B,

)

Отвергнуть

,

Отвергнуть

Отвергнуть

Отвергнуть

Допустить

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]