Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
§ 8.4. Синтез конечных автоматов и последовательностных машин при задании, сформулированном на языке регулярных выраженийПредположим теперь, что задано одно или несколько регулярных выражений (см. § 7.3) и требуется синтезировать П-машину, которая представляла бы события, определяемые заданными выражениями, появлением для каждого из этих событий своего символа на выходе. Задача сводится к синтезу конечного автомата, который представляет каждое из этих событий своим множеством состояний. Задача такого рода по существу решена уже в гл. VII. Действительно, первая теорема Клини была доказана в этой главе эффективно, т. е. доказательство теоремы содержало метод построения автомата, представляющего любое событие, заданное регулярным выражением. Если задано несколько регулярных выражений, то этим же методом можно построить для каждого из них свой представляющий автомат, а выходы этих автоматов подать на вход общего преобразователя. Однако мы сталкиваемся здесь с ситуацией, подобной той, которая встречалась нам уже в § 8.2: решение задачи нам известно, но оно не удовлетворяет нас, так как при этом решении синтезируемая машина имеет чрезмерно большое число k состояний, и поэтому она неудобна для последующей минимизации. Ниже кратко описывается иной метод построения конечного автомата, представляющего одно или несколько событий, заданных регулярными выражениями. Этот метод является естественной графической интерпретацией метода, предложенного В. М. Глушковым [252], и приводит к автоматам с меньшим числом состояний, чем метод, использованный в гл. VII при доказательстве первой теоремы Клини. Начнем со случая, когда задано одно регулярное выражение. Форма записи регулярных выражений, которая удобна нам здесь, несколько отличается от формы записи, введенной в гл. VII. Именно, исходными элементами при составлении регулярного выражения в гл. VII служили конечные куски входных лент (т. е. конечные последовательности входных символов Для конечных последовательностей
Поэтому по регулярному выражению с исходными элементами Так, например, регулярное выражение, которое в обозначениях гл. VII имело вид
при
Ясно, что глубина нового регулярного выражения может оказаться значительно большей, чем у исходного. Следующим этапом построения автомата, представляющего соответствующее регулярное событие, является изображение этого регулярного выражения в форме графа. Построение графа определим индуктивно следующим образом: 1. Для исходных скобок, т. е. скобок
графы представлены на рис. 8.1. Дизъюнкция
Рис. 8.1. Произведение Итерация 2. Пусть теперь для регулярных выражений Тогда граф выражения В полученном графе началом служит точка, полученная объединением начал Граф выражения
Рис. 8.2. Точка замыкания (начало графа Определив эти операции над графами, мы теперь можем для каждого регулярного выражения построить соответствующий ему граф. Приведем примеры. Регулярное выражение
имеет граф, показанный на рис. 8.2, где приведены также и промежуточные графы. Регулярное выражение
имеет граф, показанный на рис. 8.3. Потребуем, чтобы граф, изображающий регулярное выражение, удовлетворял следующим условиям: любой путь на графе от начала к любому из его концов определ нет входную последовательность, появление которой на входе автомата соответствует наступлению события, определяемого заданным регулярным выражением
Рис. 8.3. Графы, изображенные на рис. 8.2 и 8.3, этому условию удовлетворяют. Однако нетрудно указать регулярные выражения, для которых графы, построенные по указанным выше правилам, уже не будут удовлетворять этим условиям: Так, например, для выражения
соответствующий граф (рис. 8.4) имеет «ложные пути». Действительно, путь, соответствующий входной последовательности
т. е. не соответствует наступлению события В качестве второго примера такого рода рассмотрим рис. 8.5, где приведен граф, соответствующий регулярному выражению
Путь, показанный на рис.
соответствует граф, показанный на рис. 8.6. На графе существует путь
Рис. 8.4.
Рис. 8.5. Приведенные три примера (рис. 8.4 — 8.6) характеризуют все три случая, которые могут привести к появлению на графе ложных путей. Такие случаи возможны при выполнении следующих операций:
Рис. 8.6. 1) умножение слева на дизъюнкцию, если хотя бы один из дизъюнктивных членов заканчивается итерацией
2) операция дизъюнкции, если хотя бы один из дизъюнктивных членов начинается с итерации
3) умножение двух итераций
Рис. 8.7.
Рис. 8.8. Для того чтобы избежать появления на графе «ложных путей», в перечисленных трех случаях при выполнении правил построения графов, соответствующие начала и концы объединяются с применением стрелок, которые не несут символов
Рис. 8.9. Расстановку пустых стрелок продемонстрируем, исправляя с их помощью графы приведенных трех примеров (рис. 8.4 — 8.6). Исправленные графы показаны соответственно на рис. 8.7, 8.8 и 8.9. В первом случае пустая стрелка ведет из конца итерации; во втором случае пустая стрелка ведет из общей начальной вершинц в начало итерации; в третьем случае пустая стрелка ведет из конца первой итерации в начало второй итерации. Этим графам соответствуют приведенные выше регулярные выражения, однако ложных путей графы уже не содержат. В качестве основного примера, на котором будет демонстрироваться описываемый метод синтеза автомата, рассмотрим выражение
Граф, соответствующий регулярному выражению (8.1), с введением пустых стрелок везде, где это необходимо, изображен на рис. 8.10. На этом рисунке надписи над стрелками имеьг и верхние индексы. Их смысл поясняется ниже.
Рис. 8.10. Предположим теперь, что нам задано регулярное выражение и по нему построен граф. Просматривая регулярное выражение, перенумеруем подряд цифрами Соответствующий номер вписывается в качестве верхнего символа у Так, например, регулярное выражение (8.1) нашего основного примера после простановки номеров у
Обращаясь теперь к графу, проставим верхние индексы (номера) у всех символов Выпишем теперь у каждого узла графа верхние индексы всех входящих в него стрелок, а у начального узла, кроме того, выпишем индекс 0. Все индексы узла, из которого выходит пустая стрелка, приписываются к индексам узла, к которому эта пустая стрелка подходит (но не наоборот!). Одинаковые индексы дважды у одного и того же узла не выписываются. На рис. 8.11 показан граф нашего примера с выписанными индексами у всех узлов. Теперь приступим к составлению следующей таблицы. Столбцы таблицы соответствуют различным символам Вторая строка обозначается индексом 0 клетку этой строки, соответствующую столбцу
Рис. 8.11. В нашем примере таблица с залолненными двумя строками имеет вид табл. 8.51. Таблица 8.50
Таблица 8.51
Теперь дополним таблицу столькими строками, сколько содержится различных заполнений в строке 0, соответственно обозначив введенные строки. В нашем примере получаем табл. 8.52. Таблица 8.52
Таблица 8.53
Каждая клетка введенных строк заполняется теперь подобно тому, как были заполнены клетки строки 0. Так, например, в клетку, стоящую на пересечении строки 1, 7, 12 и столбца В табл. 8.53 показано заполнение введенных трех строк. Далее вновь дополним табл. 8.53 столькими строками, сколько содержится новых, не встречавшихся ранее заполнений во введенных ранее трех строках. Соответственно вводятся новые строки и в их клетки вписываются индексы по указанным выше правилам. Этот процесс наращивания таблицы закончится в конечное число шагов, так как общее число различных сочетаний индексов конечно. Если N — число букв в заданном регулярном выражении, то всего имеется Отметим «галочками» слева все строки, содержащие в леврм столбце индексы, которые приписаны конечным узлам (концам графа). Результат построения таблицы для нашего примера приведен в табл. 8.54. Перекодируем теперь наименования строк таблицы, присвоив им подряд символы Построенная так таблица (в нашем примере табл. 8.55) представляет собой основную таблицу конечного автомата, который, отправляясь от начального состояния Поясним это обстоятельство, используя рассмотренный пример. Подадим на вход нашего автомата при начальном состоянии Таблица 8.54
Таблица 8.55
Вообще, всякий раз, когда подача некоторой последовательности переводит автомат в состояние, отмеченное галочкой, это означает, что соответствующий путь на графе заканчивается стрелкой, ведущей в конечный узел, т. е. что этой последовательности соответствует путь из начального узла в конечный. Но это, в свою очередь, означает, что наступило заданное событие. Следовательно. построенный автомат представляет заданное событие. В том случае, если появилась входная последовательность, которая не может служить начальным куском ни для какой последовательности, входящей в событие и, следовательно, далее событие уже не наступит, построенный автомат попадает в состояние В случае, когда задано несколько событий
Соответствующий граф изображен на рис. 8.12. Применение описанного алгоритма приводит к построению таблиц 8.56 и 8.57. Состояния, представляющие события Все построение представляющего автомата, которое мы провели, перейдя от заданного регулярного выражения к его графу, могло бы быть выполнено и непосредственно по регулярному выражению графа. Такой путь, использованный автором описанного метода В. М. Глушковым, может оказаться более удобным при сложных выражениях
Рис. 8.12. Таблица 8.57
Таблица 8.56
Однако построение с помощью графа нагляднее и поэтому более удобно для этой книги. Естественно, возникает вопрос об оценке «сверху» числа состояний у автомата, который синтезирован описанным методом. Мы приведем без доказательств эту оценку для случая, когда синтезируется автомат, представляющий определенные события. Определенные события составляют подкласс регулярных событий, для которых возможна лучшая оценка числа состояний. Пусть заданы определенные события
Эта формула не содержит итераций (так как события определенные) и, следовательно, граф Практически при использований описанного метода получаются автоматы с гораздо меньшим числом состояний.
|
1 |
Оглавление
|