2
Тема 10: Нормальные формы контекстно-свободных грамматик Рассматривается что каждая контекстно-свободная грамматика эквивалентна некоторой контекстно-свободной грамматике специального вида, а именно грамматике в нормальной форме Хомского или в нормальной форме Грейбаха. Для получения нормальной формы Хомского нужны несколько предварительных преобразований, имеющих и самостоятельное значение. 1. Удалить бесполезные символы, т.е. нетерминалы или терминалы, которые не встречаются в порождениях терминальных цепочек из стартового символа. 2. Удалить ε-продукции, т.е. продукции вида A для некоторого нетерминала A. 3. Удалить цепные продукции вида A B с нетерминалами A и B. Устранение бесполезных символов Определение : Символ X называется полезным в грамматике G = (V T , V N , P, S), если существует некоторое порождение вида S X w, где wV T *, , (V N V Т )*, X может быть как нетерминалом, так и терминалом. Если символ X не является полезным, то называется бесполезным. Очевидно, что исключение бесполезных символов из грамматики не изменяет порождаемого языка, поэтому все бесполезные символы можно обнаружить и удалить. Определение : Символ XV N называется порождающим, если существует такое слово wV Т *, так чтобы X w. Заметим, что каждый терминал является порождающим, поскольку w может быть этим терминалом, порождаемым за 0 шагов. Если символ X не является порождающим, то называется непорождающим.

Tema11asdasd

Embed Size (px)

DESCRIPTION

asdasdasd

Citation preview

Page 1: Tema11asdasd

Тема 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 не является достижимым, то он называется

недостижимым.

Полезный символ является одновременно и порождающим, и

достижимым. Если сначала удалить из грамматики непорождающие

Page 2: Tema11asdasd

символы (также каждое правило, содержащее хотя бы один такой

символ), а затем недостижимые (и правила, их содержащие), то

останутся только полезные.

Теорема: Для любой КС-грамматики можно построить эквивалентную 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.