Нормальная форма Хомского — различия между версиями
Vincent (обсуждение | вклад) (→Преобразование грамматики в нормальную форму Хомского) |
Vincent (обсуждение | вклад) (→Несколько определений) |
||
| Строка 13: | Строка 13: | ||
{{Определение | {{Определение | ||
| − | |definition= | + | |definition=Нетерминал называется обнуляемым, если из него можно прямо или косвенно получить пустую строку. |
| − | Если <tex> A \rightarrow \varepsilon </tex>, то <tex> A </tex> {{---}} | + | Если <tex> A \rightarrow \varepsilon </tex>, то <tex> A </tex> {{---}} обнуляемый. |
| − | Если <tex> A \rightarrow B_1....B_n </tex>, где все <tex> B_i </tex> обнуляемые, то <tex> A </tex> тоже | + | Если <tex> A \rightarrow B_1....B_n </tex>, где все <tex> B_i </tex> обнуляемые, то <tex> A </tex> тоже обнуляемый. |
}} | }} | ||
{{Определение | {{Определение | ||
| − | |definition=Пара | + | |definition=Пара нетерминалов <tex> A </tex> и <tex> B </tex> называется узловой, если <tex> A \Rightarrow^* B </tex>. |
<tex> \forall A </tex> выполняется <tex> (A, A) </tex> {{---}} узловая пара. | <tex> \forall A </tex> выполняется <tex> (A, A) </tex> {{---}} узловая пара. | ||
Версия 07:14, 26 октября 2011
Несколько определений
| Определение: |
| Грамматикой в нормальной форме Хомского (Chomsky normal form) называется грамматика, в которой могут содержатся правила только следующего вида
. . . (где — терминал, — нетерминалы, — стартовая вершина, — пустая строка, стартовая вершина не содержится в правых частях правил). |
| Определение: |
| Нетерминал называется обнуляемым, если из него можно прямо или косвенно получить пустую строку.
Если , то — обнуляемый. Если , где все обнуляемые, то тоже обнуляемый. |
| Определение: |
| Пара нетерминалов и называется узловой, если .
выполняется — узловая пара. Если — узловая пара, а , то тоже узловая пара. |
Преобразование грамматики в нормальную форму Хомского
Рассмотрим контекстно-свободную грамматику . Для преобразования ее в нормальную форму Хомского необходимо выполнить 5 шагов. Каждый шаг работает c преобразованной грамматикой.
- Создание новой стартовой вершины.
- Создадим новую стартовую вершину с новым правилом , где — старая стартовая вершина. Получим .
- Удаление -правил.
- Если , то выкинем такое правило.
- Если , где не содержит и обнуляемых переменных, то добавим такое правило в .
- Если , причем содержит обнуляемые переменные, то представим в следующем виде , где — вхождение обнуляемой переменной, не содержит обнуляемых переменных. Добавим в все правила, которые можно получить удалением всевозможных комбинаций из . Таких вариантов будет .
- Если стартовая вершина является обнуляемой, то добавим в правило .
- Преобразование узловых пар.
- Для каждой узловой пары , найдем все правила , где — произвольная строка терминалов и нетерминалов, и добавим A \rightarrow w </tex> в , из которой удалены бесполезные символы, -правила, длинные правила и цепные правила. Такая грамматика содержит только правила следующего вида:
- возможно, (при условии, что не содержится в правых частях правил)
Избавимся от правил, в правых частях которых записаны два символа, один из которых является терминалом, то есть правил вида , и . Введем для каждого терминала "персональный" нетерминал . Затем правила вида заменим парой правил и , правила вида заменим парой правил и , а правила вида — тройкой правил , и .
Теперь у нас остались только правила вида , и, возможно, (при условии, что не содержится в правых частях правил). Грамматика, содержащая правила только такого вида, называется грамматикой в нормальной форме Хомского.
Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками, например, алгоритм Кока-Янгера-Касами