Конечный автомат Обучающая программа Определение конечного автомата Работа конечного автомата Диаграмма состояний Таблица состояний Разбор входной цепочки Допустимая строка Детерминированный конечный автомат Переход от НКА к ДКА Связь с регулярными выражениями Связь с регулярными грамматиками Переход от регулярной грамматики к КА Заключение В помощь студентам Конечный автомат Обучающая программа Определение конечного автомата Конечным автоматом (КА) называют кортеж следующего вида: M(Q, V, , q0, F) где Q – конечное множество состояний автомата; V – конечное множество допустимых входных символов; Q0 – начальное состояние автомата Q; F – непустое множество конечных состояний автомата – функция переходов. Находясь в некотором состоянии, функция позволяет перейти в другое состояние по данному входному символу H a A B b d c D b S a C Функция описывается как: Q={H, V={a, A,b, B,c,C,d}D,– S} – конечное конечноемножество множество допустимых состояний автомата входных символов (H,a)=A (A,b)=B (A,d)=C --- демонстрация по щелчку мыши --- (B,c)=D (C,a)=D (D,b)=S Работа конечного автомата Работа конечного автомата представляет собой некоторую Определение конечного автомата последовательность шагов, или тактов, Эта последовательность используется для распознавания символов входной цепочки. В какое состояние автомат перейдет на следующем шаге работы, определяет функция переходов и текущий символ входной цепочки: На каждом шаге работы автомат находиться в одном из своих состояний Q (в текущем состоянии). В начале работы – в состоянии H (H,a)=A (B,c)=D Начальное Текущее (A,b)=B (C,a)=D состояние (A,d)=C (D,b)=S Входная цепочка: a b c b B H a A b d c a D b C Работа КА продолжается до тех пор, пока на его вход поступают символы из входной цепочки. --- демонстрация по щелчку мыши --- S Диаграмма состояний КА Определение конечного автомата Работа конечного автомата КА часто представляют в виде диаграммы или графа переходов автомата. Граф переходов КА – это ориентированной граф, в котором вершины графа – это символы состояний КА; есть дуга (P, T), помеченная входным символом a, если в КА определена (P, a) и T (P, a) Рассмотрим КА Построим по этому КА граф: M({ H, B , A , S }, {a, b}, , H, {S}); : ( H, b )= B ( B,a a )= A ( A , b )= { B, S} H B --- демонстрация по щелчку мыши --- A S Таблица состояний КА Определение конечного автомата По диаграмме состояний можно построить таблицу состояний: Работа конечного автомата a Диаграмма состояний H a A B b d c a C D b H S b B B D S d A A C c C D D S END 1. Строки таблицы состояний помечаются вершинами графа, а столбцы –допустимыми входными символами. 2. Если существует переход из состояния 1 в состояние 2 по входному символу х, то на пересечении строки, помеченной состоянием 1 и столбца, помеченном символом х ставится нетерминальный символ состояния 2. Данная таблица используется для распознавания предложений, принадлежащих языку Разбор входной цепочки Определение конечного автомата Рассмотрим разбор входной цепочки abcb Работа конечного автомата Диаграмма состояний Для грамматики, описанной диаграммой состояний: B Таблица состояний H a A b c d D b S a C Входная цепочка: a H b d A A a b c b C B B C c D D D S S END --- демонстрация по щелчку мыши --- Допустимая строка Определение конечного автомата Работа конечного автомата Диаграмма состояний КА допускает строку x, тогда и только тогда, когда он из начального состояния H может перейти в конечное состояние S по символам, соответствующим входной цепочке. Рассмотрим пример: Таблица состояний Разбор входной цепочки ГРАММАТИКА: ДИАГРАММА СОСТОЯНИЙ SA A 0B | 1B | 0A | 1A | 0 | 1 0|1 H 0|1 A B +A | -A S 0|1 +|- ER ┴ B Данная грамматика, описанная диаграммой состояний, допускает цепочки, содержащие символы 0, 1, +, - и . Например: 1011 , 10+011 , 0-101+1 и т.д. Состояние ER в диаграмме состояний соответствует состоянию «ОШИБКА». Если входная цепочка не содержит символы 0, 1, + или -, то мы переходим в состояние ER, генерируя при этом сообщение об ошибке. Детерминированный КА Определение конечного автомата Работа конечного автомата Диаграмма состояний Таблица состояний Конечный автомат M(Q, V, ,q0, F) называют детерминированным конечным автоматом (ДКА), если в каждом из его состояний для любого входного символа есть однозначный переход из данного состояния в другое Разбор входной цепочки Допустимая строка H a A B b d c D b S a C В противном случае конечный автомат называют недетерминированным (НКА) Признак недетерминированности H a A B b b c D b S a C --- демонстрация по щелчку мыши --- Детерминированный КА Определение конечного автомата Работа конечного автомата Диаграмма состояний Таблица состояний Если функция переходов ДКА определена для каждого состояния автомата, то автомат называется полностью определенным Разбор входной цепочки Допустимая строка Моделировать работу ДКА существенно проще, чем работу произвольного КА. Для любого НКА можно построить эквивалентный ему ДКА. Поэтому используемый произвольный КА стремятся преобразовать в ДКА. При построении компиляторов чаще всего используют полностью определенный ДКА. Далее рассмотрим переход от НКА к ДКА Переход от НКА к ДКА Рассмотрим на примере переход от недетерминированного КА к детерминированному. B c H a A b D b ДИАГРАММА СОСТОЯНИЙ b a Построим конечный C автомат: Определение конечного автомата Работа конечного автомата Диаграмма состояний Таблица состояний Разбор входной цепочки Допустимая строка Детерминированный конечный автомат a H b d A B, С A B C c C D D D S S END Признак недетермин B,C ированност заменили и на S1 a H b d A A S1 D S S END S1 c S D C D Для того, чтобы избавиться от недерминированности необходимо ввести дополнительное состояние S1 вместо В,С. При этом в таблице ДКА убираются строки B,C и все переходы по символам из этих состояний записываются в S1. Связь КА и регулярных выражений Определение конечного автомата Работа конечного автомата Диаграмма состояний Таблица состояний Регулярные выражения и конечные автоматы связаны между собой следующим способом: Разбор входной цепочки Допустимая строка для любого регулярного языка, заданного регулярным выражением, можно построить конечный автомат, определяющий тот же язык; для любого регулярного языка, заданного конечным автоматом, можно получить регулярное выражение, определяющее тот же язык. Детерминированный конечный автомат Переход от НКА к ДКА Связь КА и регулярных грамматик Определение конечного автомата Работа конечного автомата Диаграмма состояний Таблица состояний Разбор входной цепочки Допустимая строка Детерминированный конечный автомат На основе имеющееся регулярной грамматики можно построить эквивалентный ей КА, и наоборот, для заданного КА можно построить эквивалентную ему регулярную грамматику. Это очень важное утверждение, поскольку регулярные грамматики используются для определения лексических конструкций языков программирования. Создав автомат на основе известной грамматики, мы получаем распознаватель для лексических конструкций языка. Переход от НКА к ДКА Связь с регулярными выражениями Таким образом, удается решить задачу разбора для лексических конструкций языка, заданных произвольной регулярной грамматикой. Обратное утверждение также важно, поскольку позволяет узнать грамматику, цепочки языка которой допускает заданный автомат Переход от регулярной грамматики к КА Определение конечного автоматаПо Работа конечного автомата Диаграмма состояний Таблица состояний Разбор входной цепочки Допустимая строка Детерминированный конечный автомат Переход от НКА к ДКА Связь с регулярными выражениями Связь с регулярными грамматиками всему сказанному выше можно перейти от регулярной грамматики к конечному автомату. Для этого необходимо: • по исходной грамматике построить диаграмму состояний; • по диаграмме состояний строится конечный автомат. 2. ДИАГРАММА СОСТОЯНИЙ 1. ГРАММАТИКА S C B A C ┴ Ab | Ba b | Cb a | Ca A H a b b ┴ a 3. КОНЕЧНЫЙ АВТОМАТ На пересечении строки (H) и столбца (a) ставится состояние A, в которое осуществляется переход из H по a. S C b B Далее автомат строится соответственно этому пункту. a H a b A B A C B C C A S ┴ B END --- демонстрация по щелчку мыши --- S Заключение Определение конечного автомата Работа конечного автомата Диаграмма состояний Таблица состояний Разбор входной цепочки Таким образом, можно сказать, что конечные автоматы, конечные автоматы могут обозначать регулярные выражения (см. презентацию «Регулярные выражения») Допустимая строка Детерминированный конечный автомат Переход от НКА к ДКА Связь с регулярными выражениями Связь с регулярными грамматиками Переход от регулярной грамматики к КА Автомат позволяет определить принадлежность входной цепочки заданному языку, что используется в лексическом анализаторе (см. презентацию «Лексический анализатор»)