Upload
raducan-mihai
View
215
Download
1
Embed Size (px)
DESCRIPTION
asdasdasd
Citation preview
Тема 10: Нормальные формы контекстно-свободных грамматик
Рассматривается что каждая контекстно-свободная грамматика
эквивалентна некоторой контекстно-свободной грамматике специального
вида, а именно грамматике в нормальной форме Хомского или в
нормальной форме Грейбаха.
Для получения нормальной формы Хомского нужны несколько
предварительных преобразований, имеющих и самостоятельное
значение.
1. Удалить бесполезные символы, т.е. нетерминалы или терминалы,
которые не встречаются в порождениях терминальных цепочек из
стартового символа.
2. Удалить ε-продукции, т.е. продукции вида A для некоторого
нетерминала A.
3. Удалить цепные продукции вида A B с нетерминалами A и B.
Устранение бесполезных символов
Определение: Символ X называется полезным в грамматике G = (VT, VN,
P, S), если существует некоторое порождение вида S X w, где wVT*, ,
(VNVТ)*, X может быть как нетерминалом, так и терминалом.
Если символ X не является полезным, то называется бесполезным.
Очевидно, что исключение бесполезных символов из грамматики не
изменяет порождаемого языка, поэтому все бесполезные символы можно
обнаружить и удалить.
Определение: Символ XVN называется порождающим, если
существует такое слово wVТ*, так чтобы X w. Заметим, что каждый
терминал является порождающим, поскольку w может быть этим
терминалом, порождаемым за 0 шагов.
Если символ X не является порождающим, то называется
непорождающим.
Определение: Символ XVN называется достижимым, если существует
порождение S X, для некоторых и β, где , β(VNVТ)*.
Если символ X не является достижимым, то он называется
недостижимым.
Полезный символ является одновременно и порождающим, и
достижимым. Если сначала удалить из грамматики непорождающие
символы (также каждое правило, содержащее хотя бы один такой
символ), а затем недостижимые (и правила, их содержащие), то
останутся только полезные.
Теорема: Для любой КС-грамматики можно построить эквивалентную G'
грамматику без непорождающих символов.
Алгоритм создания грамматики G'=(VN', VT', S, P').
Шаг 1. i=0, V0={A / AVN, A->, VT*}
Шаг 2. i=i+1, Vi=Vi-1{X / XVN, X, VTVi-1
Шаг 3. Vi Vi-1 то переходим к шагу 2.
Шаг 4. Если Vi=Vi−1 VT'=VT, VN'=VNVi. В 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'=VNVi, VT'=VTVi, P' содержит все правила из P,
которые содержат только терминалы и элементы из Vi.