Удаление eps-правил из грамматики — различия между версиями
Boichenko (обсуждение | вклад) |
Boichenko (обсуждение | вклад) |
||
Строка 36: | Строка 36: | ||
<tex>A \to a</tex> | <tex>A \to a</tex> | ||
---- | ---- | ||
− | Итак, приходим к следующему '''алгоритму удаления <tex>\varepsilon</tex>-правил''': | + | Итак, приходим к следующему <big>'''алгоритму удаления <tex>\varepsilon</tex>-правил'''</big>: |
# Пока есть <tex>\varepsilon</tex>-правило.(Обозначим его за <tex>A \to \varepsilon</tex>)<br /> Если <tex>A</tex> - стартовое состояние - ничего не делаем и переходим к пункту 1. | # Пока есть <tex>\varepsilon</tex>-правило.(Обозначим его за <tex>A \to \varepsilon</tex>)<br /> Если <tex>A</tex> - стартовое состояние - ничего не делаем и переходим к пункту 1. |
Версия 16:58, 14 октября 2010
Определение: |
Правила вида | называются -правилами.
По данной произвольной КС-грамматике можно построить новую КС-грамматику без -правил, эквивалентную исходной без терминала .
То есть, язык порождаемый грамматикой .
Перед представлением алгоритма преобразования, рассмотрим несколько примеров.
1. C
-правилами: (Здесь и далее терминалы; нетерминалы; произвольные строки из теминалов и нетеминалов)
Без
-правил:
2. Более интересный пример -
-порождающий терминал встречается в продукции несколько раз:
Если удаляется
-правило , то каждую продукцию ,содержащую справа, следует заменить на продукций, где - число встреченных в продукции , так как каждое такое может находиться в 2ух состояниях - есть оно в продукции или же нет. Да, из этих продукций могут быть повторения, нужно попытаться найти их и удалить лишние.Итого, получаем грамматику без
-правил:
Итак, приходим к следующему алгоритму удаления
-правил:- Пока есть
Если - стартовое состояние - ничего не делаем и переходим к пункту 1.
-правило.(Обозначим его за ) - Удалить его
- Каждую продукцию ,содержащую справа заменяем на продукций, как в примере 2. Переход к пункту 1.
Заметим, что на 3ем пункте мы можем породить еще одно
-правило, например:
Получим: