Нормальная форма Хомского — различия между версиями
Vincent (обсуждение | вклад) |
|||
Строка 10: | Строка 10: | ||
где <tex> a </tex> {{---}} терминал, <tex> A, B, C </tex> {{---}} нетерминалы, <tex> S </tex> {{---}} стартовая вершина, <tex> \varepsilon </tex> {{---}} пустая строка, стартовая вершина не содержится в правых частях правил. | где <tex> a </tex> {{---}} терминал, <tex> A, B, C </tex> {{---}} нетерминалы, <tex> S </tex> {{---}} стартовая вершина, <tex> \varepsilon </tex> {{---}} пустая строка, стартовая вершина не содержится в правых частях правил. | ||
− | |||
− | |||
− | |||
− | |||
}} | }} | ||
Строка 21: | Строка 17: | ||
|statement=Любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. | |statement=Любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. | ||
|proof= | |proof= | ||
− | Рассмотрим контекстно-свободную грамматику <tex> \Gamma </tex>. Для приведения ее к нормальной форме Хомского необходимо выполнить | + | Рассмотрим контекстно-свободную грамматику <tex> \Gamma </tex>. Для приведения ее к нормальной форме Хомского необходимо выполнить пять шагов. На каждом шаге мы строим новую <tex> \Gamma_i </tex>, которая допускает тот же язык, что и <tex> \Gamma </tex>. |
# Удаление <tex> \varepsilon </tex>-правил. | # Удаление <tex> \varepsilon </tex>-правил. | ||
− | #:Воспользуемся [[Удаление eps-правил из грамматики|алгоритмом удаления <tex> \varepsilon </tex>-правил ]] из грамматики | + | #:Воспользуемся [[Удаление eps-правил из грамматики|алгоритмом удаления <tex> \varepsilon </tex>-правил ]] из грамматики. |
# Удаление цепных правил. | # Удаление цепных правил. | ||
− | #:Воспользуемся [[Удаление_цепных_правил_из_грамматики| алгоритмом удаления цепных правил]] из грамматики. | + | #:Воспользуемся [[Удаление_цепных_правил_из_грамматики| алгоритмом удаления цепных правил]] из грамматики. |
− | # | + | # Удалим бесполезные символы. |
− | #: | + | #:Воспользуемся [[Удаление бесполезных символов из грамматики| алгоритмом удаления бесполезных символов]] из грамматики. |
− | # | + | # Уберем ситуации, когда в правиле встречаются несколько терминалов. |
− | #:Воспользуемся [[Удаление длинных правил из грамматики|алгоритмом удаления длинных правил]] из грамматики | + | #:Для всех правил вида <tex> A \rightarrow u_1 u_2 ... u_n </tex> (где <tex> n \ge 2 </tex>, <tex> u_i </tex> {{---}} терминал или нетерминал) заменим все терминалы <tex> u_i </tex> на переменные <tex> U_i </tex> и добавим правила <tex> U_i \rightarrow u_i </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 |
Версия 04:13, 7 ноября 2011
Несколько определений
Определение: |
Грамматикой в нормальной форме Хомского (Chomsky normal form) называется контекстно-свободная грамматика, в которой могут содержатся правила только следующего вида:
, , где , — терминал, — нетерминалы, — стартовая вершина, — пустая строка, стартовая вершина не содержится в правых частях правил. |
Приведение грамматики к нормальной форме Хомского
Теорема: |
Любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. |
Доказательство: |
Рассмотрим контекстно-свободную грамматику . Для приведения ее к нормальной форме Хомского необходимо выполнить пять шагов. На каждом шаге мы строим новую , которая допускает тот же язык, что и .
|