- •Глава 10 Регулярные языки
- •Алгоритм преобразования регулярной грамматики к автоматному виду
- •Пример преобразования регулярной грамматики к автоматному виду
- •Детерминированные и недетерминированные конечные автоматы
- •Преобразование конечного автомата к детерминированному виду
- •Минимизация конечных автоматов
- •Регулярные выражения. Свойства регулярных выражений
- •Уравнения с регулярными коэффициентами
- •Связь регулярных выражений и регулярных грамматик
- •Построение леволинейной грамматики для языка, заданного регулярным выражением
- •Построение регулярного выражения для языка, заданного леволинейной грамматикой
- •Связь регулярных выражений и конечных автоматов
- •Построение конечного автомата для языка, заданного регулярным выражением
- •Связь регулярных грамматик и конечных автоматов
- •Построение конечного автомата на основе леволинейной грамматики
- •Построение леволинейной грамматики на основе конечного автомата
- •Пример построения конечного автомата на основе заданной грамматики
- •Лемма о разрастании для регулярных языков
Детерминированные и недетерминированные конечные автоматы
Конечный автомат M(QV,S,q0,F) называют детерминированным конечным автоматом (ДКА), если в каждом из его состояний для любого входного символа функция перехода содержит не более одного состояния: VaeV, VqeQ: либо δ(a,q) = {г}, reQ либо δ(a,q) = 0.
В противном случае конечный автомат называют недетерминированным. ДКА может быть задан в виде пятерки:
где Q — конечное множество состояний автомата; V — конечное множество допустимых входных символов; δ — функция переходов, отображающая V*Q в множество Q.: δ(a,q) = r, aeV, q,reQ q0 — начальное состояние автомата Q qoeQ F — непустое множество конечных состояний автомата, FcQ F*0.
Если функция переходов ДКА определена для каждого состояния автомата, то автомат называется полностью определенным ДКА: VaeV, VqeQ: либо эδ(a,q) = r,reQ.
Моделировать работу ДКА существенно проще, чем работу произвольного КА.
Доказано, что для любого КА можно построить эквивалентный ему ДКА. Поэтому используемый произвольный КА стремятся преобразовать в ДКА. При построении компиляторов чаще всего используют полностью определенный ДКА.
Преобразование конечного автомата к детерминированному виду
Алгоритм преобразования произвольного КА M(QV,δ,q0,F) в эквивалентный ему ДКА M'(Q',V,δ',q'o,F') заключается в следующем:
1. Множество состояний Q' автомата М' строится из комбинаций всех состояний множества Q автомата М. Если q1,q2,-,qn> n > 0 — состояния автомата М, V0<i<n qieQ то всего будет 2п-1 состояний автомата М'. Обозначим их так: [qi,q2,...,qm]. 0<m<n.
2. Функция переходов δ' автомата М' строится так: δ'(a,[q1,q2,-,qm]) = [r1,r2.-.rk], где V0 < i < m э0 < j < k так, что δ(a,qi) = кj;
3. Обозначим q'0 = [q0];
4. Пусть f1,f2,...,fi, 1 > 0 — конечные состояния автомата М, VO < i < I fseF, тогда множество конечных состояний F' автомата М' строится из всех состояний, имеющих вид [...,f1;,...], fieF.
Доказано, что описанный выше алгоритм строит ДКА, эквивалентный заданному произвольному КА.
После построения из нового ДКА необходимо удалить все недостижимые состояния.
Состояние qeQ в КА M(QV,δ,q0,F) называется недостижимым, если ни при какой входной цепочке wе V+ невозможен переход автомата из начального состояния q0 в состояние q. Иначе состояние называется достижимым.
Для работы алгоритма удаления недостижимых состояний используются два множества: множество достижимых состояний R и множество текущих активных состояний на каждом шаге алгоритма pj. Результатом работы алгоритма является полное множество достижимых состояний R. Рассмотрим работу алгоритма по шагам:
После выполнения данного алгоритма из КА можно исключить все состояния, не входящие в построенное множество R.
Рассмотрим работу алгоритма преобразования произвольного КА в ДКА на примере автомата M({H,A,B.S}.{a,b},δ,H,{S}); δ: δ(H,b) - В, δ(В,а) - A, δ(A,b) = {B,S}. Видно, что это недетерминированный КА (из состояния А возможны два различных перехода по символу b). Граф переходов для этого автомата был изображен выше на рис. 10.1.
Построим множество состояний эквивалентного ДКА:
После построения ДКА исключим недостижимые состояния. Множество достижимых состояний ДКА будет следующим R = {[H],[B],[A],[BS]}. В итоге, исключив все недостижимые состояния, получим ДКА:
Ничего не изменяя, переобозначим состояния ДКА. Получим:
Граф переходов полученного ДКА изображен на рис. 10.3.
Этот автомат можно преобразовать к полностью определенному виду. Получим граф состояний, изображенный на рис. 10.4 (состояние Е — это состояние «ошибка»).
При построении распознавателей к вопросу о необходимости преобразования КА в ДКА надо подходить, основываясь на принципе разумной достаточности. Моделировать работу ДКА существенно проще, чем произвольного КА, но при выполнении преобразования число состояний автомата может существенно возрасти и, в худшем случае, составит 2п-1, где n — количество состояний исходного КА. В этом случае затраты на моделирование ДКА окажутся больше, чем на моделирование исходного КА. Поэтому не всегда выполнение преобразования автомата к детерминированному виду является обязательным.
