- •Глава 10 Регулярные языки
- •Алгоритм преобразования регулярной грамматики к автоматному виду
- •Пример преобразования регулярной грамматики к автоматному виду
- •Детерминированные и недетерминированные конечные автоматы
- •Преобразование конечного автомата к детерминированному виду
- •Минимизация конечных автоматов
- •Регулярные выражения. Свойства регулярных выражений
- •Уравнения с регулярными коэффициентами
- •Связь регулярных выражений и регулярных грамматик
- •Построение леволинейной грамматики для языка, заданного регулярным выражением
- •Построение регулярного выражения для языка, заданного леволинейной грамматикой
- •Связь регулярных выражений и конечных автоматов
- •Построение конечного автомата для языка, заданного регулярным выражением
- •Связь регулярных грамматик и конечных автоматов
- •Построение конечного автомата на основе леволинейной грамматики
- •Построение леволинейной грамматики на основе конечного автомата
- •Пример построения конечного автомата на основе заданной грамматики
- •Лемма о разрастании для регулярных языков
Алгоритм преобразования регулярной грамматики к автоматному виду
Имеется регулярная грамматика G(VT,VN,P,S), необходимо преобразовать ее в почти эквивалентную автоматную грамматику G'(VT,VN',P',S'). Для определенности будем рассматривать леволинейные грамматики, как уже было сказано выше (для праволинейных грамматик можно легко построить аналогичный алгоритм).
Алгоритм преобразования прост и заключается он в следующей последовательности действий:
Шаг 1. Все нетерминальные символы из множества VN грамматики G переносятся во множество VN' грамматики G'.
Шаг 2. Необходимо просматривать все множество правил Р грамматики G.
Если встречаются правила вида А->Ва1, A,BeVN, a1eVT или вида Vn->a1, AeVN, a1eVT, то они переносятся во множество Р' правил грамматики G' без изменений.
Если встречаются правила вида A->Ba1a2...an, n > 1, A,BeVN, Vn>i>0: aieVT, то во множество нетерминальных символов VN' грамматики G' добавляются символы А1А2,...,Аn-1, а во множество правил Р' грамматики G' добавляются правила:
Если встречаются правила вида A->a1a2...an, n > 1, AeVN, Vn > i > 0: aiеVT, то во множество нетерминальных символов VN' грамматики G' добавляются символы A1,A2,…,An-1, а во множество правил Р' грамматики G' добавляются правила:
Если встречаются правила вида А->В или вида А->λ, то они переносятся во множество правил Р' грамматики G' без изменений.
Шаг 3. Просматривается множество правил Р' грамматики G'. В нем ищутся правила вида А->В или вида А->λ.
Если находится правило вида А->В, то просматривается множество правил Р’ грамматики G'. Если в нем присутствует правила вида В->С, В->Са, В->а или В->Х, то в него добавляются правила вида А->С, А->Са, А->а и А->λ соответственно, VA,B,CeVN', VaeVT' (при этом следует учитывать, что в грамматике не должно быть совпадающих правил, и если какое-то правило уже присутствует в грамматике G', то повторно его туда добавлять не следует). Правило А->В удаляется из множества правил Р'.
Если находится правило вида А->λ, то просматривается множество правил Р' грамматики G1. Если в нем присутствует правило вида В->А или В->Аа, то в него добавляются правила вида В->λ и В->а соответственно, VA,BeVN', VaeVT1 (при этом следует учитывать, что в грамматике не должно быть совпадающих правил, и если какое-то правило уже присутствует в грамматике G', то повторно его туда добавлять не следует). Правило А->λ, удаляется из множества правил Р'.
Шаг 4. Если на шаге 3 было найдено хотя бы одно правило вида А-»В или А-»λ, во множестве правил Р' грамматики G', то надо повторить шаг 3, иначе перейти к шагу 5.
Шаг 5. Целевым символом S' грамматики G' становится символ S. Шаги 3 и 4 алгоритма в принципе можно не выполнять, если грамматика не содержит правил вида А-»В (такие правила называются цепными) или вида А-»λ (такие правила называются λ-правилами). Реальные регулярные грамматики обычно не содержат правил такого вида. Тогда алгоритм преобразования грамматики к автоматному виду существенно упрощается. Кроме того, эти правила можно было бы устранить предварительно с помощью специальных алгоритмов преобразования (они рассмотрены дальше, в главе, посвященной КС-грамматикам, но также применимы и к регулярным грамматикам).
