Удаление цепных правил из грамматики — различия между версиями
Bloof (обсуждение | вклад) |
Bloof (обсуждение | вклад) |
||
Строка 34: | Строка 34: | ||
''Необходимость.'' Предположим, что <tex>w\in L(G)</tex>. Тогда <tex>w</tex> имеет левое порождение <tex>S\Rightarrow _{lm}^* w</tex>. Где бы в левом порождении не использовалась цепное правило, переменная в правой части становится крайней слева в выводимой цепочке и сразу же заменяется. Таким образом, левое порождение в <tex>G</tex> можно разбить на последовательность "шагов", в которых ноль или несколько цепных правил сопровождаются нецепным. Заметим, что любое нецепное правило, перед которым нет цепных, образует такой "шаг". Но по построению <tex>G_1</tex> каждый из этих шагов может быть выполнен одним ее правилом. Таким образом, <tex>S\Rightarrow _{G_1}^* w</tex>. | ''Необходимость.'' Предположим, что <tex>w\in L(G)</tex>. Тогда <tex>w</tex> имеет левое порождение <tex>S\Rightarrow _{lm}^* w</tex>. Где бы в левом порождении не использовалась цепное правило, переменная в правой части становится крайней слева в выводимой цепочке и сразу же заменяется. Таким образом, левое порождение в <tex>G</tex> можно разбить на последовательность "шагов", в которых ноль или несколько цепных правил сопровождаются нецепным. Заметим, что любое нецепное правило, перед которым нет цепных, образует такой "шаг". Но по построению <tex>G_1</tex> каждый из этих шагов может быть выполнен одним ее правилом. Таким образом, <tex>S\Rightarrow _{G_1}^* w</tex>. | ||
}} | }} | ||
+ | |||
+ | ==Литература== | ||
+ | * ''Хопкрофт Д., Мотвани Р., Ульман Д.'' — '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.) |
Версия 20:40, 6 ноября 2011
Определение: |
Цепное правило — правило вида | , где и — нетерминалы.
Наличие цепных правил в грамматике может усложнять доказательства теорем и давать излишние шаги в выводах слов. Научимся удалять цепные правила из грамматики.
Определение: |
Цепная пара — упорядоченная пара | , в которой , используя только цепные правила.
Теорема: |
Для любой КС-грамматики существует эквивалентная ей КС-грамматика без цепных правил. |
Доказательство: |
Алгоритм удаления цепных правил из грамматики: 1) Найти все цепные пары .2) Для каждой пары добавить к правилам все правила вида , где — нецепное правило из .Найти все цепные пары можно по индукции: Базис. — цепная пара для любого нетерминала, так как за ноль шагов.Индукция. Если пара — цепная, и есть правило , то — цепная пара.Нетрудно понять, что такой алгоритм найдет все цепные правила грамматики , и только их.Докажем, что, если грамматика построена по грамматике с помощью данного алгоритма, то , то есть тогда и только тогда, когда .Достаточность. Предположим, Необходимость. Предположим, что . Так как каждое правило эквивалентно последовательности из нуля или нескольких цепных правил , за которой следует нецепное правило из , то из следует . Таким образом, каждый шаг порождения в может быть заменен одним или несколькими шагами в . Собрав эти последовательности шагов, получим, что . . Тогда имеет левое порождение . Где бы в левом порождении не использовалась цепное правило, переменная в правой части становится крайней слева в выводимой цепочке и сразу же заменяется. Таким образом, левое порождение в можно разбить на последовательность "шагов", в которых ноль или несколько цепных правил сопровождаются нецепным. Заметим, что любое нецепное правило, перед которым нет цепных, образует такой "шаг". Но по построению каждый из этих шагов может быть выполнен одним ее правилом. Таким образом, . |
Литература
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)