Нормальная форма Хомского — различия между версиями
Vincent (обсуждение | вклад) (→Преобразование грамматики в нормальную форму Хомского) |
Vincent (обсуждение | вклад) (→Преобразование грамматики в нормальную форму Хомского) |
||
Строка 33: | Строка 33: | ||
==Преобразование грамматики в нормальную форму Хомского== | ==Преобразование грамматики в нормальную форму Хомского== | ||
− | Рассмотрим [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободную грамматику]] <tex> \Gamma </tex>. Для преобразования ее в нормальную форму Хомского необходимо выполнить 5 шагов. | + | Рассмотрим [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободную грамматику]] <tex> \Gamma </tex>. Для преобразования ее в нормальную форму Хомского необходимо выполнить 5 шагов. На каждом шаге мы строим новую <tex> \Gamma_i </tex>, которая допускает тот же язык, что и <tex> \Gamma </tex>. |
# Создание новой стартовой вершины. | # Создание новой стартовой вершины. | ||
− | #: Создадим новую стартовую вершину <tex> S_0 </tex> с новым правилом <tex> S_0 \rightarrow S </tex>, где <tex> S </tex> {{---}} старая стартовая вершина. | + | #: Создадим новую стартовую вершину <tex> S_0 </tex> с новым правилом <tex> S_0 \rightarrow S </tex>, где <tex> S </tex> {{---}} старая стартовая вершина. Добавим в <tex> \Gamma_1 </tex> эту вершину, правило и <tex> \Gamma </tex>. |
# Удаление <tex> \varepsilon </tex>-правил. | # Удаление <tex> \varepsilon </tex>-правил. | ||
##Если <tex> A \rightarrow \varepsilon </tex>, то выкинем такое правило. | ##Если <tex> A \rightarrow \varepsilon </tex>, то выкинем такое правило. | ||
Строка 49: | Строка 49: | ||
#:Для каждого правила вида <tex> A \rightarrow B_0 B_1 ... B_n </tex>, где <tex> n \ge 2 </tex>, добавим новые нетерминалы <tex> A_1, A_2, ... , A_{n-2} </tex> и правила <tex> A \rightarrow B_1 A_1 </tex>, <tex> A_1 \rightarrow B_2 A_2 </tex>, <tex> A_2 \rightarrow B_3 A_3 </tex>, <tex> ... </tex> , <tex> A_{n-2} \rightarrow B_{n-1} B_n </tex> в <tex> \Gamma_5 </tex>. | #:Для каждого правила вида <tex> A \rightarrow B_0 B_1 ... B_n </tex>, где <tex> n \ge 2 </tex>, добавим новые нетерминалы <tex> A_1, A_2, ... , A_{n-2} </tex> и правила <tex> A \rightarrow B_1 A_1 </tex>, <tex> A_1 \rightarrow B_2 A_2 </tex>, <tex> A_2 \rightarrow B_3 A_3 </tex>, <tex> ... </tex> , <tex> A_{n-2} \rightarrow B_{n-1} B_n </tex> в <tex> \Gamma_5 </tex>. | ||
− | После пятого шага грамматика <tex> \Gamma_5 </tex> содержит только правила вида <tex> A \rightarrow B C </tex> и <tex> A \rightarrow a </tex>, где <tex> A, B, C </tex> {{---}} нетерминалы, <tex> a </tex> {{---}} терминал. Возможно, что также присутствует правило <tex> S_0 \rightarrow \varepsilon </tex>. Новая грамматика | + | После пятого шага грамматика <tex> \Gamma_5 </tex> содержит только правила вида <tex> A \rightarrow B C </tex> и <tex> A \rightarrow a </tex>, где <tex> A, B, C </tex> {{---}} нетерминалы, <tex> a </tex> {{---}} терминал. Возможно, что также присутствует правило <tex> S_0 \rightarrow \varepsilon </tex>. Новая грамматика допускает тот же язык, что и <tex> \Gamma </tex>. |
− | + | Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками, например, [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ|алгоритм Кока-Янгера-Касами]]. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками, например, [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ|алгоритм Кока-Янгера-Касами]] |
Версия 07:54, 26 октября 2011
Несколько определений
Определение: |
Грамматикой в нормальной форме Хомского (Chomsky normal form) называется грамматика, в которой могут содержатся правила только следующего вида
. . (где . — терминал, — нетерминалы, — стартовая вершина, — пустая строка, стартовая вершина не содержится в правых частях правил). |
Определение: |
Нетерминал называется обнуляемым, если из него можно прямо или косвенно получить пустую строку.
Если Если , то — обнуляемый. , где все обнуляемые, то тоже обнуляемый. |
Определение: |
Пара нетерминалов Если выполняется — узловая пара. — узловая пара, а , то тоже узловая пара. | и называется узловой, если .
Определение: |
Правило | называется смешанным, если содержит хотя бы один терминал и хотя бы один нетерминал.
Преобразование грамматики в нормальную форму Хомского
Рассмотрим контекстно-свободную грамматику . Для преобразования ее в нормальную форму Хомского необходимо выполнить 5 шагов. На каждом шаге мы строим новую , которая допускает тот же язык, что и .
- Создание новой стартовой вершины.
- Создадим новую стартовую вершину с новым правилом , где — старая стартовая вершина. Добавим в эту вершину, правило и .
- Удаление
- Если , то выкинем такое правило.
- Если , где не содержит и обнуляемых нетерминалов, то добавим такое правило в .
- Если , причем содержит обнуляемые нетерминалы, то представим в следующем виде , где — вхождение обнуляемого нетерминала, не содержит обнуляемых нетерминалов. Добавим в все правила, которые можно получить удалением всевозможных комбинаций из . Таких вариантов будет .
- Если стартовая вершина является обнуляемой, то добавим в правило .
-правил.
- Преобразование узловых пар.
- Для каждой узловой пары , найдем все правила , где — произвольная строка терминалов и нетерминалов, и добавим в .
- Преобразование смешанных правил.
- Если — смешанное правило, то можно представить в виде , где — строка нетерминалов, а является терминалом. Тогда для каждого добавим нетерминал и правило в . Получим . Добавим правило в .
- Преобразование длинных правил.
- Для каждого правила вида , где , добавим новые нетерминалы и правила , , , , в .
После пятого шага грамматика
содержит только правила вида и , где — нетерминалы, — терминал. Возможно, что также присутствует правило . Новая грамматика допускает тот же язык, что и .Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками, например, алгоритм Кока-Янгера-Касами.