Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Удаление бесполезных символов грамматики

ПРОВЕРКА СУЩЕСТВОВАНИЯ ЯЗЫКА

Проверка существования языка выполняется перед всеми другими исследованиями и преобразованиями КС-грамматики. Алгоритм проверки основан на вычислении множества нетерминалов, порождающих терминальные строки. Если начальный символ грамматики оказывается среди этих нетерминалов, то язык, определяемый грамматикой не пуст, т.е. существует.

Обозначим N= {Z | ZÎN, ZÞ*x, xÎT} и рассмотрим алгоритм проверки существования языка.

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

1. Положить N0

2. Вычислить N1= N0 È {A | (A®a) Î P и a Î (N0 È T)*}

3. Если N1¹ N0, то положить N0= N1 и перейти к п.2; иначе положить N= N1

4. Если SÎN, то язык существует, иначе язык не существует

Пример. Язык, определяемый грамматикой с правилами

1) S® AB 2) A ® aA 3) A ® a 4) B ® b

не пуст, что подтверждает результат применения изложенного алгоритма.

1. N0

2. N1={A, B}

3. N1= N0? Нет N0 = N1={A, B}

4. N1={A, B, S}

5. N1= N0? Нет N0 = N1={A, B, S}

6. N1={A, B, S}

7. N1= N0? Да N = N1={A, B, S}

5. SÎN то L(G) =Æ, т.е. язык существует

 

При разработке грамматики языка могут возникнуть следующие ошибки:

§ В грамматике имеются нетерминальные символы, которые не участвуют в выводе терминальных цепочек

§ В грамматике существуют символы, недоступные из начального символа грамматики

Бесполезные символы это

W={X | X Î S, Ø$(SÞ*aXbÞ*axb, a, x, b Î T*).

Их можно разделить на три группы:

8.2.1.1 нетерминалы, не порождающие терминальных строк

{X | X ÎN, Ø$(XÞ*x), x Î T*}

8.2.1.2 недостижимые нетерминалы, порождающие терминальные строки

{X | X Î N, Ø$(SÞ*aXb), $(XÞ*x), a, b Î S, xÎT).

8.2.1.3 недостижимые терминалы

{X | X Î T, Ø$(SÞ*aXb), a, b Î S).

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

Алгоритм устранения нетерминалов, не порождающих терминальных строк, состоит в следующем:

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

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

1. Положить N0

2. Вычислить N1= N0 È {A | (A®a) Î P и a Î (N0 È T)*}

3. Если N1¹ N0, то положить N0= N1 и перейти к п.2; иначе положить N= N1

4. Вычислить VN’ = VN Ç N, NБ= VN – V’N, P’=P-PБ, где PБ ÍP – это множество правил, содержащих бесполезные нетерминалы X Î NБ, т.е.

PБ = {(X®a) Î P, (A®aXb) Î P для всех X ÎNБ, где АÎ V’N, a,b Î S*}

Пример: Рассмотренный алгоритм преобразует грамматику G=(VN, T, P, S) = ({a, b, d}, {Q, A, B, C}, P, Q) c правилами:

Q ® ab

Q ® AC

A ® AB

B ® b

C ® db

Шаг алгоритма Действия и результаты
  N0
  N1 = { Q, B, C }
  N1 = N0? Нет N0 = N1={ Q, B, C }
  N1 = { Q, B, C }
  N1 = N0? Да N ={ Q, B, C }
  V’N= { Q, B, C } NБ = {A} P’= {Q ® ab, B ® b, C ® db}
<== предыдущая лекция | следующая лекция ==>
Контекстно-свободные грамматики и языки | Устранение цепных правил
Поделиться с друзьями:


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


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



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




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