Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Устранение цепных правил




ЭКВИВАЛЕНТНЫЕ ПРЕОБРАЗОВАНИЯ КС-ГРАММАТИК

Алгоритм устранения недостижимых символов.

Недостижимые терминалы (группа “в” бесполезных символов) и недостижимые нетерминалы, порождающие терминальные строки (группа “б” бесполезных символов), исключаются из грамматики с помощью алгоритма устранения недостижимых символов.

Вход: КС-грамматика G=(VN, T, P, S)

Выход: Эквивалентная КС-грамматика G’=(N’, T’, P’, S) у которой L(G)=L(G’) и для всех Z Î S’ существуют выводы SÞ*aZb, где a,bÎ (S’)*.

Здесь, как и в предыдущей задаче, сначала решается обратная задача, т.е. определяется множество W достижимых символов Z:

W={Z | Z Î S, $ SÞ*aZb, где a,bÎ (S’)*}.

1. Положить W0=S

2. Вычислить W1= W0 È {X | X Î S, (A®aXb) ÎP, A Î W0, a,bÎ (S’)*}

3. Если W1¹W0, то положить W0= W1 и перейти к п.2; иначе положить W= W1

4. Вычислить N’=NÇW, T’==TÇW, Б=S-W, P’=P-PБ, где PБÍP – это множество правил, содержащих недостижимые символы XÎ Б, т.е. PБ = {(X ®a)ÎP для всех XÎ Б, где aÎS}

Пример: Преобразование КС-грамматики с правилами

1) Q ® ab 2)B ® b 3)C ® db

в эквивалентную грамматику, не содержащую бесполезных символов.

Шаг алгоритма Действия и результаты
  W0=Q
  W1 = { Q, a,b }
  W1 = W0? Нет W0 = W1={ Q, a, b }
  W1 = { Q, a, b }
  W1 = W0? Да W ={ Q, a, b }
  N’= { Q} T’={a, b} Б={B, C, d} P’= {Q ® ab}

Цепное правило – это правило вида А®В, где А,В Î N. Цепные правила могут быть причиной нежелательных свойств грамматики, таких, например, как циклы. Алгоритм устранения цепных правил осуществляет замещение правой части каждого цепного правила, используя для этого не цепные правила.

Вход: КС-грамматика G=(N, T, P, S) без e-правил.

Выход: Эквивалентная КС-грамматика G’=(N, T, P’, S) без цепных правил.

1. Для каждого нетерминала А вычислить NA = {B | AÞ*B, где BÎ N }:

1.1. Положить N0A={A}

1.2. Вычислить N1A = N0A È{C | (B ® C) Î P, B Î N0A, C Î N }

1.3. Если N1A ¹ N0A, то положить N0A = N1A и перейти к п.1.2, иначе положить
NA = N1A

2. Построить множество P’ так: если (В ®a) Î P не является цепным правилом (a Ï N), то включить в P’ правило А ®a для каждого А, такого, что В Î NA, т.е.

P’={ А ®a для всех (В ®a) Î P, где a Ï N и В Î NA }

Пример: Преобразовать грамматику G с правилами:

G: S® X

X ® Y

Y ® Y; | z

в эквивалентную грамматику без цепных правил:

 

Шаг алгоритма Действия и результаты
1.1 N0S = {S}
1.2 N1S = {S, X}
1.3 N1S = N0S? Нет N0S = N1S={S, X}
1.2 N1S = {S, X, Y}
1.3 N1S = N0S? Нет N0S = N1S={S, X,Y}
1.2 N1S = {S, X, Y}
1.3 N1S = N0S? Да NS ={S, X,Y}
1.1 N0X = {X}
1.2 N1X = {X,Y}
1.3 N1X = N0X? Нет N0X = N1X={X, Y}
1.2 N1X = {X,Y}
1.3 N1X = N0X? Да NX ={X,Y}
1.1 N0Y = {Y}
1.2 N1Y = {Y}
1.3 N1Y = N0Y? Да NY ={Y}
  P’={S®Y;|z, X®Y; |z, Y®Y; |z}

Пример: Преобразовать грамматику G с правилами:

G: E® E+T

E®T

T®T*P

T®P

P®i

P®(E)

1. После выполнения шага 1 алгоритма получаем: NE ={E, T, P}, NT ={T, P}, NP ={P}

2. Выберем первый нетерминал E из множества NE. Формируя множество правил, левая часть которых - нетерминальный символ Е, а правые части нецепных правил исходной грамматики, в левой части которых находятся символы из множества NE, получаем: { E® E+T, E®T*P, E®i, E®(E)}. Таким же образом рассматриваем остальные символы из NE, затем символы из NT и NP .

3. Окончательно получаем P’={ E® E+T, E®T*P, E®i, E®(E), T®T*P, T®i, T®(E), P®i, P®(E)}




Поделиться с друзьями:


Дата добавления: 2014-01-03; Просмотров: 1438; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.