Удаление цепных правил из грамматики — различия между версиями
м |
м (→Алгоритм) |
||
Строка 13: | Строка 13: | ||
Алгоритм удаления цепных правил из грамматики: | Алгоритм удаления цепных правил из грамматики: | ||
− | #Найти все цепные пары <tex> | + | #Найти все цепные пары в грамматике <tex>\Gamma</tex>. |
− | #Для каждой цепной пары <tex>(A,B)</tex> добавить | + | #Для каждой цепной пары <tex>(A,B)</tex> добавить в грамматику <tex>\Gamma_1</tex> все правила вида <tex>A\rightarrow\alpha</tex>, где <tex>B\rightarrow\alpha</tex> {{---}} нецепное правило из <tex>\Gamma</tex>. |
Найти все цепные пары можно по индукции: | Найти все цепные пары можно по индукции: | ||
Строка 22: | Строка 22: | ||
'''Индукция.''' Если пара <tex>(A,B)</tex> {{---}} цепная, и есть правило <tex>B\rightarrow C</tex>, то <tex>(A,C)</tex> {{---}} цепная пара. | '''Индукция.''' Если пара <tex>(A,B)</tex> {{---}} цепная, и есть правило <tex>B\rightarrow C</tex>, то <tex>(A,C)</tex> {{---}} цепная пара. | ||
− | Нетрудно понять, что такой алгоритм найдет все цепные правила грамматики <tex> | + | Нетрудно понять, что такой алгоритм найдет все цепные правила грамматики <tex>\Gamma</tex>, и только их. |
==Корректность алгоритма== | ==Корректность алгоритма== |
Версия 06:40, 7 ноября 2011
Определение: |
Цепное правило — правило вида | , где и — нетерминалы.
Наличие цепных правил в грамматике усложняет доказательства теорем и даёт излишние шаги в выводах слов. Научимся удалять цепные правила из грамматики.
Алгоритм
Определение: |
Цепная пара — упорядоченная пара | , в которой , используя только цепные правила.
Алгоритм удаления цепных правил из грамматики:
- Найти все цепные пары в грамматике .
- Для каждой цепной пары добавить в грамматику все правила вида , где — нецепное правило из .
Найти все цепные пары можно по индукции:
Базис.
— цепная пара для любого нетерминала, так как за ноль шагов.Индукция. Если пара
— цепная, и есть правило , то — цепная пара.Нетрудно понять, что такой алгоритм найдет все цепные правила грамматики
, и только их.Корректность алгоритма
Теорема: |
Для любой КС-грамматики существует эквивалентная ей КС-грамматика без цепных правил. |
Доказательство: |
Докажем, что, если грамматика построена по грамматике с помощью описанного выше алгоритма, то , то есть тогда и только тогда, когда .Достаточность. Предположим, Необходимость. Предположим, что . Так как каждое правило эквивалентно последовательности из нуля или нескольких цепных правил , за которой следует нецепное правило из , то из следует . Таким образом, каждый шаг порождения в может быть заменен одним или несколькими шагами в . Собрав эти последовательности шагов, получим, что . . Тогда имеет левое порождение . Где бы в левом порождении ни использовалось цепное правило, нетерминал в правой части становится крайним слева в выводимой цепочке и сразу же заменяется. Таким образом, левое порождение в можно разбить на последовательность "шагов", в которых ноль или несколько цепных правил сопровождаются нецепным. Заметим, что любое нецепное правило, перед которым нет цепных, образует такой "шаг". Но по построению каждый из этих шагов может быть выполнен одним ее правилом. Таким образом, . |
Литература
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)