КАТЕГОРИИ: Архитектура-(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) |
Расширенные грамматики
Формальное определение языка Способы получения одних цепочек символов из других 1 Это можно сделать непосредственно, т.е. за одну операцию. Условное обозначение Þ. Например, dÞh означает, что цепочку символов h можно получить из цепочки d за одну операцию. Пример. Есть цепочка d=aAb и h=anb. Здесь, a,n,b - терминальные символы (обозначены строчными буквами), а А – нетерминальный символ. Пусть среди множества правил Р есть такое: A®nЄР. То есть нетерминальный символ АЄN можно заменить на терминальный n. Таким образом, за одну операцию из d можно получить цепочку h. 2 Одну цепочку из другой можно получить не за одну операцию. Условие обозначения Þ* Например, a0 Þ*an Это имеет место, если a0 = an, или существует последовательность непосредственно получаемых цепочек таких, что a0 Þ a1 Þ a2 Þ… an-1 Þ an Способы получения цепочек символов необходимы, чтобы формально дать определение языка L(G), описываемое заданной грамматикой G. Язык L(G) – это множество цепочек w терминальных (и только терминальных!) символов, выводимых из начального (стартового, главного) нетерминального символа S. L(G)={w|S Þ*w,w –терминальные цепочки}. Вертикальная черта после w в выражении означает, что w получены при условии что они выводятся из S. А звездочка означает, что этот вывод может происходить за произвольное количество операций. При этом используется множество P правил, описанное в грамматике G. Ниже приводятся примеры грамматики и описываемые ими языки.
Пример 1 G=(T,N,P,S) T={x, y, w, z} – алфавит терминальных символов. Только эти символы можно использовать. N={S, A, B} – множество нетерминальных символов, из которых S – главный (стартовый) нетерминальный символ. Именно с него должен начинаться вывод цепочек (слов) в соответствии с множеством правил вывода P. p={S®AB, A®x,A®y, B®w, B®z}. Эти правила означают, что S можно заменить последовательностью нетерминальных символов AB. A®x, A®y означает, что А можно заменить на x или на y и т.д., осуществляя эти замены, получаем цепочки w из терминальных символов, составляющих формальный язык L(G). L(G)={xw, yw, xz, yz}. Только эти четыре цепочки (слова) и составляют язык, описываемый заданной грамматикой G. Существуют т.н. расширенные грамматики. Они порождают те же языки, что и рассмотренные выше грамматики, но являются более наглядными. Расширенные грамматики задаются парами Ai ® ri, где Ai ЄN – i-й нетерминальный символ, ri – i-е регулярное выражение в алфавите N U I. Нетерминальный символ первой пары является ГЛАВНЫМ (стартовым)для вывода цепочек. Например, расширенная грамматика, эквивалентная описанной в примере выше, имеет вид: S®AB, A®x|y, B®w|z. Напомним, что вертикальная черта читается как “или”. То есть А может быть заменена на x или y, а В – на w или z.
Пример 2 Алфавит терминальных символов Т={вино, коньяк, каша, борщ, мясо, кофе, чай} Алфавит нетерминальных символов N={ОБЕД, АЛКОГОЛЬ, ЕДА, ПИТЬЕ} ОБЕД®АЛКОГОЛЬ ЕДА ПИТЬЕ АЛКОГОЛЬ ® коньяк | вино ЕДА ® борщ каша | мясо ПИТЬЕ ® чай | кофе В первой паре описан главный нетерминальный символ ОБЕД. Он описывается как последовательность из АЛКОГОЛЬ, ЕДА, ПИТЬЕ. В свою очередь, АЛКОГОЛЬ – это или коньяк, или вино. ЕДА состоит из борща, за которым следует или каша, или мясо. ПИТЬЕ – это или чай, или кофе. С помощью упомянутых ранее действий над цепочками можно выразить самые разные варианты для нетерминального символа ОБЕД. Например, ОБЕД ® АЛКОГОЛЬ * ЕДА ПИТЬЕ означает, что АЛКОГОЛЬ может повторяться в цикле нуль и более раз. После этого идут ЕДА и ПИТЬЕ. Рассмотрим также другие варианты. Например, АЛКОГОЛЬ ® КОНЬЯК + вино* означает, что должен быть хотя бы раз выпит коньяк, а затем может циклически приниматься вино. Количество этих циклов от нуля и более раз. Или еще вариант: ЕДА ® борщ * мясо + каша Борщ может употребляться от нуля и больше раз. Затем обязательно хотя бы один раз мясо и после этого – каша. Все эти примеры приведены для того, чтобы показать, как с помощью формальной грамматики можно описать самые разнообразные правила вывода для получения цепочек (слов) формального языка.
Дата добавления: 2015-06-27; Просмотров: 456; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |