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

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

Имеется регулярная грамматика G(VT,VN,P,S), необходимо преобразовать ее в почти эквивалентную автоматную грамматику G'(VT,VN',P',S'). Для опреде­ленности будем рассматривать леволинейные грамматики, как уже было сказано выше (для праволинейных грамматик можно легко построить аналогичный ал­горитм).

Алгоритм преобразования прост и заключается он в следующей последователь­ности действий:

Шаг 1. Все нетерминальные символы из множества VN грамматики G перено­сятся во множество VN' грамматики G'.

Шаг 2. Необходимо просматривать все множество правил Р грамматики G. Если встречаются правила вида А→Ва1, A,BVN, a1VT или вида А→a1, AVN, , то они переносятся во множество Р' правил грамматики G' без изменений.

Если встречаются правила вида А→Вa1a2…an, n>1, A.BVN, n>i>0: aiVT, то во множество нетерминальных символов VN' грамматики G' добавляются символы A1,A2,...,An-i, а во множество правил Р' грамматики G' добавляются правила:

A→An-1An

An-1→ An-2 an-1

A2→A1a2

A1→Ba1

Если встречаются правила вида А→a1a2…an, n > 1, AVN, n > i > 0: aiVT, то во множество нетерминальных символов VN' грамматики G' добавляются символы A1,A2,...,An-1, а во множество правил Р' грамматики G' добавляются правила:

A→An-1an

An-1→ An-2 an-1

A2→A1a2

A1→a1

Если встречаются правила вида А→В или вида А→ то они переносятся во мно­жество правил Р' грамматики G' без изменений.

Шаг 3. Просматривается множество правил Р' грамматики G'. В нем ищутся пра­вила вида А→В или вида А→.

Если находится правило вида А→В, то просматривается множество правил Р' грамматики G'. Если в нем присутствует правила вида В→С, В→Са, В→ или В→, то в него добавляются правила вида А→С, А→Са, А→a и А→, соответст­венно, VA,B,CVN', aVT (при этом следует учитывать, что в грамматике не должно быть совпадающих правил, и если какое-то правило уже присутствует в грамматике G', то повторно его туда добавлять не следует). Правило А→В уда­ляется из множества правил Р'.

Если находится правило вида А→, то просматривается множество правил Р' грамматики G'. Если в нем присутствует правило вида В→А или В→Аа, то в него добавляются правила вида В→А. и В-»а соответственно, VA,BVN', aVT' (при этом следует учитывать, что в грамматике не должно быть совпадающих правил, и если какое-то правило уже присутствует в грамматике G', то повторно его туда добавлять не следует). Правило А→. удаляется из множества правил Р'.

Шаг 4. Если на шаге 3 было найдено хотя бы одно правило вида А→В или А→. во множестве правил Р' грамматики G', то надо повторить шаг 3, иначе перейти к шагу 5.

Шаг 5. Целевым символом S' грамматики G' становится символ S. Шаги 3 и 4 алгоритма в принципе можно не выполнять, если грамматика не со­держит правил вида А→В (такие правила называются цепными) или вида А→ (такие правила называются -правилами). Реальные регулярные грамматики обыч­но не содержат правил такого вида. Тогда алгоритм преобразования грамматики к автоматному виду существенно упрощается. Кроме того, эти правила можно было бы устранить предварительно с помощью специальных алгоритмов преоб­разования.