nC1DMY1V3A
.pdfОписание механизма управления удобно производить множеством управляющих таблиц, по одной на каждое состояние (рис. 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