Нормальная форма Хомского — различия между версиями
Vincent (обсуждение | вклад) (→Преобразование грамматики в нормальную форму Хомского) |
Vincent (обсуждение | вклад) (→Преобразование грамматики в нормальную форму Хомского) |
||
Строка 36: | Строка 36: | ||
##Если <tex> A \rightarrow \varepsilon </tex>, то выкинем такое правило. | ##Если <tex> A \rightarrow \varepsilon </tex>, то выкинем такое правило. | ||
##Если <tex> A \rightarrow w </tex>, где <tex> w </tex> не содержит <tex> \varepsilon </tex> и обнуляемых переменных, то добавим такое правило в <tex> \Gamma_2 </tex>. | ##Если <tex> A \rightarrow w </tex>, где <tex> w </tex> не содержит <tex> \varepsilon </tex> и обнуляемых переменных, то добавим такое правило в <tex> \Gamma_2 </tex>. | ||
− | ##Если <tex> A \rightarrow w </tex>, причем <tex> w </tex> содержит обнуляемые переменные, то представим <tex> w </tex> в виде <tex> w=w_0 N_0 w_1 N_1 ... w_{n-1} N_{n-1} w_n N_n </tex>, где <tex> N_i </tex> {{---}} вхождение обнуляемой переменной, <tex> w_i </tex> не содержит обнуляемых переменных. Добавим в <tex> \Gamma_2 </tex> все правила, которые можно получить удалением всевозможных комбинаций <tex> N_i </tex> из <tex> w </tex>. Таких вариантов будет <tex> 2^n </tex>. | + | ##Если <tex> A \rightarrow w </tex>, причем <tex> w </tex> содержит обнуляемые переменные, то представим <tex> w </tex> в следующем виде <tex> w=w_0 N_0 w_1 N_1 ... w_{n-1} N_{n-1} w_n N_n </tex>, где <tex> N_i </tex> {{---}} вхождение обнуляемой переменной, <tex> w_i </tex> не содержит обнуляемых переменных. Добавим в <tex> \Gamma_2 </tex> все правила, которые можно получить удалением всевозможных комбинаций <tex> N_i </tex> из <tex> w </tex>. Таких вариантов будет <tex> 2^n </tex>. |
#:Если стартовая вершина <tex> \Gamma_1 </tex> является обнуляемой, то добавим в <tex> \Gamma_2 </tex> правило <tex> S_0 \rightarrow \varepsilon </tex>. | #:Если стартовая вершина <tex> \Gamma_1 </tex> является обнуляемой, то добавим в <tex> \Gamma_2 </tex> правило <tex> S_0 \rightarrow \varepsilon </tex>. | ||
# Преобразование узловых пар. | # Преобразование узловых пар. | ||
− | ## | + | ##Для каждой узловой пары <tex> (A, B) </tex>, найдем все правила <tex> B \rightarrow w </tex>, где <tex> w </tex> {{---}} произвольная строка терминалов и нетерминалов, и добавим A \rightarrow w </tex> в <tex> \Gamma_3 </tex> <tex>. |
# Преобразование правил с длинной правой частью. | # Преобразование правил с длинной правой частью. | ||
Версия 07:13, 26 октября 2011
Несколько определений
Определение: |
Грамматикой в нормальной форме Хомского (Chomsky normal form) называется грамматика, в которой могут содержатся правила только следующего вида
. . (где . — терминал, — нетерминалы, — стартовая вершина, — пустая строка, стартовая вершина не содержится в правых частях правил). |
Определение: |
Вершина называется обнуляемой, если из нее можно прямо или косвенно получить пустую строку.
Если Если , то — обнуляемая. , где все обнуляемые, то тоже обнуляемая. |
Определение: |
Пара вершин Если выполняется — узловая пара. — узловая пара, а , то тоже узловая пара. | и называется узловой, если .
Преобразование грамматики в нормальную форму Хомского
Рассмотрим контекстно-свободную грамматику . Для преобразования ее в нормальную форму Хомского необходимо выполнить 5 шагов. Каждый шаг работает c преобразованной грамматикой.
- Создание новой стартовой вершины.
- Создадим новую стартовую вершину с новым правилом , где — старая стартовая вершина. Получим .
- Удаление
- Если , то выкинем такое правило.
- Если , где не содержит и обнуляемых переменных, то добавим такое правило в .
- Если , причем содержит обнуляемые переменные, то представим в следующем виде , где — вхождение обнуляемой переменной, не содержит обнуляемых переменных. Добавим в все правила, которые можно получить удалением всевозможных комбинаций из . Таких вариантов будет .
- Если стартовая вершина является обнуляемой, то добавим в правило .
-правил.
- Преобразование узловых пар.
- Для каждой узловой пары бесполезные символы, , -правиладлинные правила и цепные правила. Такая грамматика содержит только правила следующего вида: , найдем все правила , где — произвольная строка терминалов и нетерминалов, и добавим A \rightarrow w </tex> в , из которой удалены
- возможно, (при условии, что не содержится в правых частях правил)
Избавимся от правил, в правых частях которых записаны два символа, один из которых является терминалом, то есть правил вида
, и . Введем для каждого терминала "персональный" нетерминал . Затем правила вида заменим парой правил и , правила вида заменим парой правил и , а правила вида — тройкой правил , и .Теперь у нас остались только правила вида
, и, возможно, (при условии, что не содержится в правых частях правил). Грамматика, содержащая правила только такого вида, называется грамматикой в нормальной форме Хомского.Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками, например, алгоритм Кока-Янгера-Касами