Нормальная форма Хомского — различия между версиями
| 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 шагов. На каждом шаге мы строим новую , которая допускает тот же язык, что и .
-  Создание новой стартовой вершины.
- Создадим новую стартовую вершину с новым правилом , где — старая стартовая вершина. Добавим в эту вершину, правило и .
 
-  Удаление -правил.
- Если , то выкинем такое правило.
- Если , где не содержит и обнуляемых нетерминалов, то добавим такое правило в .
- Если , причем содержит обнуляемые нетерминалы, то представим в следующем виде , где — вхождение обнуляемого нетерминала, не содержит обнуляемых нетерминалов. Добавим в все правила, которые можно получить удалением всевозможных комбинаций из . Таких вариантов будет .
 - Если стартовая вершина является обнуляемой, то добавим в правило .
 
-  Преобразование узловых пар.
- Для каждой узловой пары , найдем все правила , где — произвольная строка терминалов и нетерминалов, и добавим в .
 
-  Преобразование смешанных правил.
- Если — смешанное правило, то можно представить в виде , где — строка нетерминалов, а является терминалом. Тогда для каждого добавим нетерминал и правило в . Получим . Добавим правило в .
 
-  Преобразование длинных правил.
- Для каждого правила вида , где , добавим новые нетерминалы и правила , , , , в .
 
После пятого шага грамматика содержит только правила вида и , где — нетерминалы, — терминал. Возможно, что также присутствует правило . Новая грамматика допускает тот же язык, что и .
Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками, например, алгоритм Кока-Янгера-Касами.
