Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

nC1DMY1V3A

.pdf
Скачиваний:
4
Добавлен:
15.04.2023
Размер:
1.71 Mб
Скачать

Описание механизма управления удобно производить множеством управляющих таблиц, по одной на каждое состояние (рис. 4.15).

S1

0

1

 

 

 

 

 

Z

Состояние (S1)

Состояние (S2)

 

 

Втолкнуть(Z)

Вытолкнуть

Отвергнуть

 

Сдвиг

Сдвиг

 

 

Состояние (S1)

 

 

 

Втолкнуть(Z)

Отвергнуть

Отвергнуть

 

Сдвиг

 

 

 

 

 

 

S2

0

1

 

 

 

 

 

z

 

Состояние (S2)

 

 

Отвергнуть

Вытолкнуть

Отвергнуть

 

 

Сдвиг

 

 

Отвергнуть

Отвергнуть

Отвергнуть

 

Рис. 4.15. Управляющие таблицы МП-автомата с двумя состояниями

Итак, полное описание МП-автомата:

1.

Входное множество {0, 1, }

2.

Множество магазинных символов {z, }

3.Множество состояний {S1, S2}, начальное состояние – S1

4.Переходы и выходы изображены в управляющих таблицах на рис. 4.15.

5. Начальное содержание магазина – .

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

Усилить возможности МП-автоматов можно за счет использования новых процедур.

Процедуру, которую можно получить, комбинируя примитивные пе-

реходы, называют расширенной операцией над магазином. Разработчик ал-

горитмов распознавания может создавать различные комбинации. Рассмотрим расширенную операцию ЗАМЕНИТЬ, которая позволяет

реализовать наиболее популярные алгоритмы распознавания, используя МП-автоматы с одним состоянием.

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

Например, ЗАМЕНИТЬ (АВС)

50

Это эквивалентно следующим примитивным операциям: ВЫТОЛКНУТЬ ВТОЛКНУТЬ (А)

ВТОЛКНУТЬ (В) ВТОЛКНУТЬ (С)

Содержимое магазина при выполнении данной процедуры меняется следующим образом:

Рассмотрим использование операции ЗАМЕНИТЬ на последнем примере. В этом случае для различия фаз вталкивания и выталкивания используется иная стратегия. Во время фазы вталкивания в верхней ячейке магазина хранится символ X, который предназначен для определения фазы вталкивания. Когда впервые встречается 1, X выталкивается из магазина и автомат начинает сопоставлять Z и 1.

Пример распознавания цепочки 000111

№ шага

Содержимое магазина

Входная цепочка

 

 

 

1

X

000111

 

 

 

2

ZX

00111

 

 

 

3

ZZX

0111

 

 

 

4

ZZZX

111

 

 

 

5

ZZZ

111

 

 

 

6

ZZ

11

 

 

 

7

Z

1

 

 

 

8

 

 

 

 

 

9

 

ДОПУСТИТЬ

 

 

 

Наличие процедуры ЗАМЕНИТЬ позволяет реализовать алгоритм с помощью одного состояния (рис. 4.16).

 

0

 

1

 

X

Заменить (ZX)

 

Вытолкнуть

Отвергнуть

Сдвиг

 

Держать

 

 

 

Z

Отвергнуть

 

Вытолкнуть

Отвергнуть

 

Сдвиг

 

 

 

 

 

Отвергнуть

 

Отвергнуть

Допустить

 

 

 

 

 

Начальное содержание магазина:

X

 

Рис. 4.16. Управляющая таблица МП-автомата с операцией ЗАМЕНИТЬ

В отличие от конечных автоматов, в теории МП-автоматов нет понятия единственного «приведенного МП-автомата» и соответственно труднее сделать выбор между конкурирующими МП-автоматами.

51

Преобразователи с магазинной памятью

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

Определение 4.9. МП-автомат называется МП-транслятором, если при распознавании он порождает выходную цепочку.

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

Рассмотрим обобщенную операцию над выходом: ВЫДАТЬ (<символы выходной цепочки>)

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

Данная операция осуществляет выдачу на произвольный носитель символов выходного языка параллельно с обработкой входной цепочки. В конфигурации памяти эта операция фиксируется между шагами распознавания. Результат перевода считывается сверху вниз в аргументах операции ВЫДАТЬ.

Поставим задачу перевода произвольной цепочки, состоящей из 0 и 1, в цепочку вида 1n0m, где n и m – соответственно, число нулей и единиц в цепочке. Например, цепочка 011011 будет переведена в 111100.

Для выполнения этой задачи МП-автомат может выдавать единицы сразу при их появлении на входе, а при появлении на входе нулей – помещать в магазин символ А. Когда встречается концевой маркер, автомат выталкивает магазинный символ и выдает на выход 0.

Управляющая таблица для автомата с одним состоянием, реализующего этот алгоритм представлена на рис. 4.17.

 

0

1

 

 

Втолкнуть(А)

Выдать(1)

Вытолкнуть

А

Выдать(0)

Сдвиг

Сдвиг

 

Держать

 

 

 

 

 

 

 

 

Втолкнуть(А)

Выдать(1)

Допустить

 

Сдвиг

Сдвиг

 

 

 

 

 

 

Начальное содержание магазина:

Рис. 4.17. Управляющая таблица МП-транслятора

Последовательность конфигураций памяти МП-автомата при обработке цепочки 01011 :

52

№ шага

Содержимое магазина

Входная цепочка

1

 

01011

2

А

1011

 

ВЫДАТЬ(1)

 

3

А

011

4

АА

11

 

ВЫДАТЬ(1)

 

5

АА

1

 

ВЫДАТЬ(1)

 

6

АА

 

 

ВЫДАТЬ(0)

 

7

А

 

 

ВЫДАТЬ(0)

 

8

 

 

9

 

ДОПУСТИТЬ

В данном примере МП-автомат служит только для перевода. Рассмотрим пример, в котором магазин используется как для распо-

знавания, так и для перевода.

Ставится задача распознавания множества { 2 r|{0,1}*}и перевода каждой цепочки 2 r в цепочку 1n0m, где n и m – соответственно, число нулей и единиц в цепочке .

Так цепочка 01011211010 должна быть переведена в цепочку 11100. Процесс обработки таких цепочек разбивается на две фазы:

1 – фаза вталкивания, которая длится до появления символа 2, во время этой фазы символы 0 и 1 вталкиваются в магазин, при этом при появлении 1 она выдается на выход.

2 – фаза выталкивания, которая наступает после появления символа 2, во время этой фазы входные символы сравниваются с магазинными. При совпадении символов каждый встреченный 0 подается на выход.

Фаза МП-автоматом запоминается с помощью состояния. Управляющие таблицы этого МП-автомата приведены на рис. 4.18.

S1

0

1

2

 

 

Состояние (S1)

Состояние (S1)

Состояние (S2)

 

 

Втолкнуть (1)

 

0

Втолкнуть (0)

 

Отвергнуть

Выдать (1)

 

 

Сдвиг

Сдвиг

 

 

Сдвиг

 

 

 

 

 

 

Состояние (S1)

Состояние (S1)

Состояние (S2)

 

 

Втолкнуть (1)

 

1

Втолкнуть (0)

 

Отвергнуть

Выдать (1)

 

 

Сдвиг

Сдвиг

 

 

Сдвиг

 

 

 

 

 

 

Состояние (S1)

Состояние (S1)

Состояние (S2)

 

 

Втолкнуть (1)

 

 

Втолкнуть (0)

 

Отвергнуть

 

Выдать (1)

 

 

Сдвиг

Сдвиг

 

 

Сдвиг

 

 

 

 

 

 

Начальное содержание магазина –

 

 

 

 

53

 

 

S2

0

1

2

 

 

Состояние (S2)

 

 

 

0

Вытолкнуть

Отвергнуть

Отвергнуть

Отвергнуть

Выдать(0)

 

 

 

 

 

Сдвиг

 

 

 

 

 

Состояние (S2)

 

 

1

Отвергнуть

Вытолкнуть

Отвергнуть

Отвергнуть

 

 

Сдвиг

 

 

 

Отвергнуть

Отвергнуть

Отвергнуть

Допустить

Рис. 4.18. Управляющие таблицы МП-автомата, выполняющего функции распознавания и перевода

Конфигурация памяти построенного МП-автомата при обработке допустимой цепочки 1012101 :

№ шага

Содержимое магазина

Состояние

Входная цепочка

1

 

S1

1012101

 

ВЫДАТЬ(1)

 

 

2

1

S1

012101

3

10

S1

12101

 

ВЫДАТЬ(1)

 

 

4

101

S1

2101

5

101

S2

101

6

10

S2

01

 

ВЫДАТЬ(0)

 

 

7

1

S2

1

8

 

S2

 

9

 

 

ДОПУСТИТЬ

Конфигурация памяти построенного МП-автомата при обработке недопустимой цепочки 1012011 :

№ шага

Содержимое магазина

Состояние

Входная цепочка

1

 

S1

1012011

 

ВЫДАТЬ(1)

 

 

2

1

S1

012011

3

10

S1

12011

 

ВЫДАТЬ(1)

 

 

4

101

S1

2011

5

101

S2

011

6

 

 

ОТВЕРГНУТЬ

Вопросы и задания для контроля к теме 4

1.Какие задачи может решать конечный автомат в процессе компиляции?

2.Опишите способы определения конечного автомата: множественный, графический, табличный.

54

3.Какой конечный автомат называется минимальным?

4.Опишите правила выявления и исключения эквивалентных состояний конечного автомата.

5.Опишите правила выявления и исключения недостижимых состояний конечного автомата.

6.Дайте определение регулярного языка.

7.Опишите правила преобразования автоматной грамматики в конечный автомат и наоборот.

8.Дайте определение недетерминированного конечного автомата.

9.Опишите правила преобразования недетерминированного автомата к виду детерминированного.

10.Дайте формальное определение автомата с магазинной памятью.

11.Перечислите операции, допустимые над входной цепочкой, магазином, текущим состоянием.

12.Опишите принцип работы МП-автомата. Конфигурация памяти.

13.Дайте определения примитивного и расширенного МП-автомата.

14.Опишите использование расширенной операции ЗАМЕНИТЬ для работы с магазином.

15.Как реализуется перевод с помощью МП-автомата.

55

Тема 5. Нисходящие методы синтаксического анализа

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

Любой процессор, работа которого включает распознавание правил,

называется синтаксическим анализатором.

Методы анализа можно разделить на две категории: нисходящие и восходящие («сверху вниз» и «снизу вверх»).

Алгоритм синтаксического анализа может быть реализован через механизм автомата с магазинной памятью. Ставится задача построения МПавтомата способного выполнять распознавание, основанные на правилах КС-грамматики.

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

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

Пример<S> – начальный нетерминал Правила грамматики:

1.<S> d<S><A>

2.<S> b<A>c

3.<A> d<A>

4.<A> c

Для МП-автомата определяем:

1.

Множество входных символов {b, c, d, }

2.

Множество магазинных символов {<S>, <A>, c, }

3.

Начальное соединение с магазина <S>

Прежде чем построить управляющую таблицу, покажем как МП-

автомат использует магазин для распознавания цепочки

dbccdc

Левый вывод этой цепочки по правилам грамматики:

<S>1 d<S>2<A> db<A>4c<A> dbcc<A>3

dbccd<A>4

dbccdc

 

Дерево вывода этой цепочки приведено на рис. 5.1.

56

Рис. 5.1. Дерево вывода цепочки dbccdc

На каждом шаге процесса обработки магазин представляет некоторое утверждение о цепочке входящих символов, оставшихся необработанными.

Строящийся МП-автомат будет иметь одно состояние. Для того, чтобы начать обработку цепочки, поместим в магазин символ <S>, то есть начальное содержимое магазина <S>. Такая инициализация будет обозна-

чать, что входная цепочка, если она допустима, должна порождаться

на-

чальным нетерминалом <S>.

 

Таким образом, начальная конфигурация памяти будет выглядеть так:

1.

<S>

dbccdc

 

В такой ситуации автомат должен сделать переход на основании

то-

го факта,

что

верхним символом магазина является <S>, а текущим

входным символом d.

 

Верхний символ магазина говорит о том, что оставшаяся цепочка входных символов должна начинаться с цепочки, порождаемой нетерминалом <S>, а текущий входной символ d говорит, что эта цепочка начинается с d. То есть цепочка, порождаемая <S>, должна начинаться с d. Такое решение обеспечивает правило 1.

Правая часть правила 1 равна d <S><A>. Чтобы зафиксировать этот факт, МП-автомат переходит к следующему входному символу и заменяет верхний символ <S> на <A><S>, причём <S> помещается выше <A>. Таким образом, на втором шаге распознавания цепочки конфигурация памяти выглядит так:

2.<A><S> bccdc

Такое содержимое магазина означает, что цепочка символов следующая за d, состоит из цепочки, порождаемой <S>, за которой следует цепочка, порождаемая <A>.

Анализ верхнего магазинного символа и текущего входного символа определяет правило 2, правая часть которого выглядит так: b<A>c, следовательно МП-автомат переходит к следующему входному символу и заменяет верхний магазинный символ <S> на <A>c, причём <A> сверху:

57

3.<A>с<A> ccdc

По входному символу с и магазинному символу <A> начинает работать правило 4, правая часть которого символ – c. Это означает, что нетерминал <A> порождает символ с. Работа автомата в этом случае, будет заключаться в сдвиге к следующему входному символу и выталкиванию верхнего магазинного символа. Таким образом,

4. <A> с cdc

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

5. <A> dc

Верхний символ маказина – <A> и текущий входной символ – d, следовательно, можно применить правило 3. Меняем по этому правилу <A> на <A> и двигаемся к следующему входному символу:

6. <A> c

По правилу 4 – выталкиваем <A> и сдвигаем входную цепочку: 7. 8. Допустить

Проведенное построение позволяет сделать следующие выводы:

порядок, в котором правила использовались в процессе обработки, а именно 1, 2, 4, 3, 4, совпадает с порядком применения правил в левом выводе входной цепочки.

Связь между конфигурациями памяти МП-автомата и левым выводом, построенным по КС-грамматике:

Обработанные

Содержимое

Промежуточная строка

символы

магазина

в левом выводе

 

<S>

<S>

 

 

d

<S><A>

d <S><A>

 

 

d b c

<A> с <A>

d b <A> с <A>

 

 

d b c

с <A>

d b c c<A>

 

 

d b c c

<A>

d b c c<A>

 

 

d b c c d

<A>

d b c c d <A>

 

 

d b c c d c

 

d b c c d c

 

 

 

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

установленная связь позволяет считать, что верхний символ магазина в каждой конфигурации соответствует определённому символу дерева вывода.

58

Укажем в конфигурации памяти у каждого магазинного символа верхний индекс, который покажет на каком шаге распознавания входной цепочки данный символ был на верху магазина:

1.<S>1

2.<A>5 <S>2

3.<A>5 с4 <A>3

4.<A>5 с4

5.<A>5

6.<A>6

7.

Перенесем эти индексы в левый вывод:

<S>1 d <S>2<A>5 d b <A>3с4<A>5 d b c c4<A>5 dbcc4<A>6

db c c4 d c

Атеперь на дерево – рис. 5.2.

Рис. 5.2. Разметка дерева вывода

Таким образом, выделяется соответствие между правилами, которые применяет автомат, и правилами, используемыми при построении дерева.

Цифры на дереве указывают порядок, в котором МП-автомат обрабатывает соответствующие символы дерева. Каждый символ дерева обрабатывается прежде, чем символы, находящиеся ниже его. Отсюда название метода – нисходящий анализ.

Результирующая управляющая таблица МП-автомата для рассмотренного примера представлена рис. 5.1.

 

d

b

c

 

 

ЗАМЕНИТЬ

ЗАМЕНИТЬ

 

 

<S>

(<A><S>)

(c <A>)

ОТВЕРГНУТЬ

ОТВЕРГНУТЬ

 

СДВИГ

СДВИГ

 

 

<А>

ЗАМЕНИТЬ (<A>)

ОТВЕРГНУТЬ

ВЫТОЛКНУТЬ

ОТВЕРГНУТЬ

СДВИГ

СДВИГ

 

 

 

с

ОТВЕРГНУТЬ

ОТВЕРГНУТЬ

ВЫТОЛКНУТЬ

ОТВЕРГНУТЬ

СДВИГ

 

 

 

 

 

ОТВЕРГНУТЬ

ОТВЕРГНУТЬ

ОТВЕРГНУТЬ

ДОПУСТИТЬ

 

 

 

 

 

Начальное содержимое магазина – Рис. 5.1. Управляющая таблица МП-автомата, реализующего нисходящий анализ

59

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