Нормальная форма Хомского — различия между версиями
Vincent (обсуждение | вклад) (→Несколько определений) |
Vincent (обсуждение | вклад) (→Преобразование грамматики в нормальную форму Хомского) |
||
Строка 33: | Строка 33: | ||
==Преобразование грамматики в нормальную форму Хомского== | ==Преобразование грамматики в нормальную форму Хомского== | ||
− | + | {{Теорема | |
+ | |statement=любую контекстно-свободную грамматику можно преобразовать в нормальную форму Хомского. | ||
+ | |proof= | ||
+ | рассмотрим [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободную грамматику]] <tex> \Gamma </tex>. Для преобразования ее в нормальную форму Хомского необходимо выполнить 5 шагов. На каждом шаге мы строим новую <tex> \Gamma_i </tex>, которая допускает тот же язык, что и <tex> \Gamma </tex>. | ||
# Создание новой стартовой вершины. | # Создание новой стартовой вершины. | ||
Строка 40: | Строка 43: | ||
##Если <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>. | ||
# Преобразование узловых пар. | # Преобразование узловых пар. | ||
Строка 49: | Строка 52: | ||
#:Для каждого правила вида <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> \Gamma </tex>. | |
− | + | }} | |
− | |||
− | |||
− | |||
==Литература== | ==Литература== | ||
* http://www.enseignement.polytechnique.fr/informatique/profs/Luc.Maranget/IF/09/chomsky.pdf | * http://www.enseignement.polytechnique.fr/informatique/profs/Luc.Maranget/IF/09/chomsky.pdf |
Версия 08:14, 26 октября 2011
Несколько определений
Определение: |
Грамматикой в нормальной форме Хомского (Chomsky normal form) называется грамматика, в которой могут содержатся правила только следующего вида
, , где , — терминал, — нетерминалы, — стартовая вершина, — пустая строка, стартовая вершина не содержится в правых частях правил. |
Определение: |
Нетерминал называется обнуляемым, если из него можно прямо или косвенно получить пустую строку.
Если Если , то — обнуляемый. , где все обнуляемые, то тоже обнуляемый. |
Определение: |
Пара нетерминалов Если выполняется — узловая пара. — узловая пара, а , то тоже узловая пара. | и называется узловой, если .
Определение: |
Правило | называется смешанным, если содержит хотя бы один терминал и хотя бы один нетерминал.
Преобразование грамматики в нормальную форму Хомского
Теорема: |
любую контекстно-свободную грамматику можно преобразовать в нормальную форму Хомского. |
Доказательство: |
рассмотрим контекстно-свободную грамматику . Для преобразования ее в нормальную форму Хомского необходимо выполнить 5 шагов. На каждом шаге мы строим новую , которая допускает тот же язык, что и .
|