Нормальная форма Хомского — различия между версиями
Vincent (обсуждение | вклад) (→Преобразование грамматики в нормальную форму Хомского) |
Vincent (обсуждение | вклад) |
||
Строка 54: | Строка 54: | ||
Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма очень удобна для работы многих алгоритмов над грамматиками, например, [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ|алгоритм Кока-Янгера-Касами]]. | Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма очень удобна для работы многих алгоритмов над грамматиками, например, [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ|алгоритм Кока-Янгера-Касами]]. | ||
+ | |||
+ | ==Литература== | ||
+ | * http://www.enseignement.polytechnique.fr/informatique/profs/Luc.Maranget/IF/09/chomsky.pdf |
Версия 07:56, 26 октября 2011
Несколько определений
Определение: |
Грамматикой в нормальной форме Хомского (Chomsky normal form) называется грамматика, в которой могут содержатся правила только следующего вида
. . (где . — терминал, — нетерминалы, — стартовая вершина, — пустая строка, стартовая вершина не содержится в правых частях правил). |
Определение: |
Нетерминал называется обнуляемым, если из него можно прямо или косвенно получить пустую строку.
Если Если , то — обнуляемый. , где все обнуляемые, то тоже обнуляемый. |
Определение: |
Пара нетерминалов Если выполняется — узловая пара. — узловая пара, а , то тоже узловая пара. | и называется узловой, если .
Определение: |
Правило | называется смешанным, если содержит хотя бы один терминал и хотя бы один нетерминал.
Преобразование грамматики в нормальную форму Хомского
Рассмотрим контекстно-свободную грамматику . Для преобразования ее в нормальную форму Хомского необходимо выполнить 5 шагов. На каждом шаге мы строим новую , которая допускает тот же язык, что и .
- Создание новой стартовой вершины.
- Создадим новую стартовую вершину с новым правилом , где — старая стартовая вершина. Добавим в эту вершину, правило и .
- Удаление
- Если , то выкинем такое правило.
- Если , где не содержит и обнуляемых нетерминалов, то добавим такое правило в .
- Если , причем содержит обнуляемые нетерминалы, то представим в следующем виде , где — вхождение обнуляемого нетерминала, не содержит обнуляемых нетерминалов. Добавим в все правила, которые можно получить удалением всевозможных комбинаций из . Таких вариантов будет .
- Если стартовая вершина является обнуляемой, то добавим в правило .
-правил.
- Преобразование узловых пар.
- Для каждой узловой пары , найдем все правила , где — произвольная строка терминалов и нетерминалов, и добавим в .
- Преобразование смешанных правил.
- Если — смешанное правило, то можно представить в виде , где — строка нетерминалов, а является терминалом. Тогда для каждого добавим нетерминал и правило в . Получим . Добавим правило в .
- Преобразование длинных правил.
- Для каждого правила вида , где , добавим новые нетерминалы и правила , , , , в .
После пятого шага грамматика
содержит только правила вида и , где — нетерминалы, — терминал. Возможно, что также присутствует правило . Новая грамматика допускает тот же язык, что и .
Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма очень удобна для работы многих алгоритмов над грамматиками, например, алгоритм Кока-Янгера-Касами.