Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava10 r.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
339.97 Кб
Скачать

Алгоритм преобразования регулярной грамматики к автоматному виду

Имеется регулярная грамматика 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 алгоритма в принципе можно не выполнять, если грамматика не содержит правил вида А-»В (такие правила называются цепными) или вида А-»λ (такие правила называются λ-правилами). Реальные регулярные грамматики обычно не содержат правил такого вида. Тогда алгоритм преобразования грамматики к автоматному виду существенно упрощается. Кроме того, эти правила можно было бы устранить предварительно с помощью специальных алгоритмов преобразования (они рассмотрены дальше, в главе, посвященной КС-грамматикам, но также применимы и к регулярным грамматикам).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]