КАТЕГОРИИ: Архитектура-(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
Дата добавления: 2014-01-03; Просмотров: 2639; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |