Нормальным формам. Удаление бесполезных символов

advertisement
Тема 10: Нормальные формы контекстно-свободных грамматик
Рассматривается
что
каждая
контекстно-свободная
грамматика
эквивалентна некоторой контекстно-свободной грамматике специального
вида,
а
именно
грамматике
в
нормальной
форме
Хомского
или
в
нормальной форме Грейбаха.
Для
получения
нормальной
формы
Хомского
нужны
несколько
предварительных преобразований, имеющих и самостоятельное значение.
1. Удалить бесполезные символы, т.е. нетерминалы или терминалы,
которые не встречаются в порождениях терминальных цепочек из
стартового символа.
2. Удалить ε-продукции, т.е. продукции вида A для некоторого
нетерминала A.
3. Удалить цепные продукции вида A  B с нетерминалами A и B.
Устранение бесполезных символов
Определение: Символ X называется полезным в грамматике G = (VT, VN,
*
*


P, S), если существует некоторое порождение вида S 
X 
w, где
wVT*, , (VNVТ)*, X может быть как нетерминалом, так и терминалом.
Если символ X не является полезным, то называется бесполезным.
Очевидно, что исключение бесполезных символов из грамматики не
изменяет порождаемого языка, поэтому все бесполезные символы можно
обнаружить и удалить.
Определение: Символ XVN называется порождающим, если существует
*

такое слово wVТ*, так чтобы X 
w. Заметим, что каждый терминал
является порождающим, поскольку w может быть этим терминалом,
порождаемым за 0 шагов.
Если
символ
X
не
является
порождающим,
то
называется
непорождающим.
Определение: Символ XVN называется достижимым, если существует
*

порождение S 
X, для некоторых  и β, где , β(VNVТ)*.
Если
символ
недостижимым.
X
не
является
достижимым, то
он
называется
Полезный
достижимым.
символ
Если
является
сначала
одновременно
удалить
из
и
порождающим,
грамматики
и
непорождающие
символы (также каждое правило, содержащее хотя бы один такой символ),
а затем недостижимые (и правила, их содержащие), то останутся только
полезные.
Теорема: Для любой КС-грамматики можно построить эквивалентную G'
грамматику без непорождающих символов.
Алгоритм создания грамматики G'=(VN', VT', S, P').
Шаг 1. i=0, V0={A / AVN, A->, VT*}
Шаг 2. i=i+1, Vi=Vi-1{X / XVN, X, VTVi-1
Шаг 3. Vi  Vi-1 то переходим к шагу 2.
Шаг 4. Если Vi=Vi−1  VT'=VT, VN'=VNVi. В P' включаем все правила из P,
которые содержат только нетерминальные символы из VN'.
Теорема:
Для
любой
КС-грамматики
G
можно
построить
новую,
эквивалентную ей КС-грамматику G' без недостижимых символов.
Алгоритм создания грамматики G'=(VN', VT', S, P').
Шаг 1. i=0, V0={S} создаём множество из одного символа – аксиомы.
Шаг 2. i=i+1, Vi=Vi−1{X/ A→X} — правило, и АVi−1.
Шаг 3. Если Vi≠Vi−1 то переходим к шагу 2.
Шаг 4. Если Vi=Vi−1  VN'=VNVi, VT'=VTVi, P' содержит все правила из P,
которые содержат только терминалы и элементы из Vi.
Download