Удаление цепных правил из грамматики — различия между версиями
м (→Постановка задачи) |
м (→Алгоритм) |
||
Строка 16: | Строка 16: | ||
Алгоритм удаления цепных правил из грамматики: | Алгоритм удаления цепных правил из грамматики: | ||
#Найти все цепные пары в грамматике <tex>\Gamma</tex>. | #Найти все цепные пары в грамматике <tex>\Gamma</tex>. | ||
− | #Для каждой цепной пары <tex>(A,B)</tex> добавить в грамматику <tex>\ | + | #Для каждой цепной пары <tex>(A,B)</tex> добавить в грамматику <tex>\Gamma'</tex> все правила вида <tex>A\rightarrow\alpha</tex>, где <tex>B\rightarrow\alpha</tex> {{---}} нецепное правило из <tex>\Gamma</tex>. |
Найти все цепные пары можно по индукции: | Найти все цепные пары можно по индукции: | ||
Строка 28: | Строка 28: | ||
===Корректность алгоритма=== | ===Корректность алгоритма=== | ||
{{Теорема | {{Теорема | ||
− | |statement= | + | |statement=Пусть <tex>\Gamma</tex> {{---}} [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]]. <tex>\Gamma'</tex> {{---}} грамматика, полученная в результате применения алгоритма к <tex>\Gamma</tex>. Тогда <tex>L(\Gamma) = L(\Gamma').</tex> |
|proof= | |proof= | ||
+ | <tex>\Rightarrow </tex> <br> | ||
+ | Покажем, что <tex>L(\Gamma) \subset L(\Gamma')</tex>. <br> | ||
+ | Пусть <tex>w\in L(\Gamma)</tex>. Тогда <tex>w</tex> имеет левое порождение <tex>S\overset{*}{\underset{lm}{\Rightarrow}} w</tex>. Где бы в левом порождении ни использовалось цепное правило, нетерминал в правой части становится крайним слева в выводимой цепочке и сразу же заменяется. Таким образом, левое порождение в <tex>\Gamma</tex> можно разбить на последовательность шагов, в которых ноль или несколько цепных правил сопровождаются нецепным. Заметим, что любое нецепное правило, перед которым нет цепных, образует такой шаг. Но по построению <tex>\Gamma'</tex> каждый из этих шагов может быть выполнен одним её правилом. Таким образом, <tex>S\overset{*}{\underset{\Gamma'}{\Rightarrow}} w</tex>, то есть <tex>w\in L(\Gamma')</tex>. | ||
− | + | <tex>\Leftarrow </tex> <br> | |
+ | Покажем, что <tex>L(\Gamma') \subset L(\Gamma)</tex>. <br> | ||
+ | Пусть <tex>w\in L(\Gamma')</tex>, то есть <tex>S\overset{*}{\underset{\Gamma'}{\Rightarrow}} w</tex>. Так как каждое правило <tex>\Gamma'</tex> эквивалентно последовательности из нуля или нескольких цепных правил <tex>\Gamma</tex>, за которой следует нецепное правило из <tex>\Gamma</tex>, то из <tex>\alpha{\underset{\Gamma'}{\Rightarrow}} \beta</tex> следует <tex>\alpha\overset{*}{\underset{\Gamma}{\Rightarrow}} \beta</tex>. Таким образом, каждый шаг порождения в <tex>\Gamma'</tex> может быть заменен одним или несколькими шагами в <tex>\Gamma</tex>. Собрав эти последовательности шагов, получим, что <tex>S\overset{*}{\underset{\Gamma}{\Rightarrow}} w</tex>, то есть <tex>w\in L(\Gamma)</tex>. | ||
− | |||
− | |||
− | |||
}} | }} | ||
==Литература== | ==Литература== | ||
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' — '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.) | * ''Хопкрофт Д., Мотвани Р., Ульман Д.'' — '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.) |
Версия 07:08, 7 ноября 2011
Определение: |
Цепное правило — правило вида | , где и — нетерминалы.
Постановка задачи
Пусть контекстно-свободная грамматика, содержащая длинные правила. Требуется построить эквивалентную грамматику , не содержащую цепных правил.
Задача удаления цепных правил из грамматики возникает при попытке её приведения к нормальной форме Хомского.
Алгоритм
Определение: |
Цепная пара — упорядоченная пара | , в которой , используя только цепные правила.
Алгоритм удаления цепных правил из грамматики:
- Найти все цепные пары в грамматике .
- Для каждой цепной пары добавить в грамматику все правила вида , где — нецепное правило из .
Найти все цепные пары можно по индукции:
Базис.
— цепная пара для любого нетерминала, так как за ноль шагов.Индукция. Если пара
— цепная, и есть правило , то — цепная пара.Нетрудно понять, что такой алгоритм найдет все цепные правила грамматики
, и только их.Корректность алгоритма
Теорема: |
Пусть контекстно-свободная грамматика. — грамматика, полученная в результате применения алгоритма к . Тогда — |
Доказательство: |
|
Литература
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)