КАТЕГОРИИ: Архитектура-(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) |
Операции над языками
Несмотря на то, что формальные языки представляют собой множество цепочек вида L(G) = {a | aÎ V*}, использование теоретико-множественных операций ограничено. Так для класса КС-языков можно применять операции объединения, но недопустимо использовать операции пересечения и дополнения. Если дан язык L(G) = {a | aÎ V*}, то дополнением языка ù L(G) будет множество цепочек, не принадлежащих V*. Это могут быть любые цепочки любых символов. Следовательно, это множество не определено. Если даны два языка L1 и L2, то операцию их пересечения можно записать так: (L1ÇL2) = ù (ù L1 Èù L2). Но множество цепочек языков ù L1 и ù L2 не определено. Следовательно, невозможно реализовать операцию пересечения двух языков L1 и L2. Поэтому говорят, что класс КС-языков замкнут для операции объединения и не замкнут для операций пересечения и дополнения. Были выделены дополнительные операции умножения, деления, подстановки, итерации, расширившие возможности формирования новых цепочек и новых языков. Операция умножения. Если даны цепочки a1, a2Î V* одного языка L(G) Í V*, то бинарная операция умножения ставит в соответствие каждой паре цепочек a1 и a2 новую цепочку a1a2, полученную в результате приписывания справа к цепочке a1 цепочки a2. Операцию умножения чаще называют конкатенацией или операцией соединения. Любую цепочку любого языка можно рассматривать как конкатенацию ее подцепочек и, в частности, как конкатенацию составляющих ее символов. Можно также говорить о конкатенации языков L1 и L2. При этом формируется новый язык: L = L1 L2 = { a1a2| a1Î L1ÍV1*,a2ÎL2ÍV2*} Í. V1*Ä V2*. (28) Если L1 = L2 = L, то операцию конкатенации можно записать как обычную мультипликативную операцию, т.е. LL = L2, LLL = L3 и т.д. (29) Для пустой цепочки e выполняется соотношение e a = a e = a, для любого aÎ V*. (30) Операция конкатенации - ассоциативна, т.е. (a1a2)a3 = a1(a2a3) = a1a2a3. (31) Можно отметить, что алгебра с одной ассоциативной бинарной операцией - умножением называется полугруппой. Операция деления. Пусть a1=g1g2ÎL1ÍV1* и a2=g2ÎL2ÍV2*, Если для цепочек двух языков L1 и L2 существуют одинаковые "хвосты", то в результате выполнения операции деления будут выделены цепочки, являющиеся "головами" для цепочек языка L1, т.е. L = L1/L2 = { g1 | g1g2ÎL1ÍV1*, g2ÎL2ÍV2* }. (32) Пусть a2=g2g1ÎL1ÍV1* и a2=g2ÎL2ÍV2*, Если для цепочек двух языков L1 и L2 существуют одинаковые "головы", то в результате выполнения операции деления будут выделены цепочки, являющиеся "хвостами" для цепочек языка L1,т.е. L=L1/L2={g1 | g2g1ÎL1ÍV1*, g2ÎL2ÍV2* }. (33) Операция подстановки. Пусть даны язык L с грамматикой G=áVT; VN;J; Pñ и язык L1 с грамматикой G1=áVT1;VN1;J1;P1ñ. Среди множества терминальных символов языка L выделен символ "a", определяющий возможность перехода к языку L1, т.е. "a" ÎVT и ("a" ®L1).Тогда при появлении символа "a" в цепочке aÎ L оказывается возможным выполнить подстановку цепочки a1Î L1. Так формируется новый язык: L* = L ("a" ®L1). (34) Если дано множество языков L1, L2,...Ln и язык L, у которого среди множества терминальных символов выделены символы "a1","a2",..."an", то для цепочки aÎLÍV*, содержащей символ "ai", возможен переход к языку Li путем замены символа "ai" цепочкой aiÎLiÍVi*. Так формируется язык L*=L("ai"®Li). Обобщением этой операции на множество языков является подстановка нескольких языков в язык L, при которой вместо каждого вхождения символа "ai" подставляется некоторая цепочка соответствующего языка, т.е. L* = ("a1"®L1, "a2"®L2,... "an"®Ln). (35) Операции над языками Li и L, где i = 1, 2,...n, порождающие цепочки нового языка a*Î L* путем замены символов "ai" языка L цепочками соответствующего языка aiÎ Li и подстановки их в цепочки aÎ L Í V* называют также суперпозицией, а оператор суперпозиции записывают так: S(L; "a1"; "a2";... "a2"| L1,L2,...Ln). (36) Главное достоинство операции подстановки заключается в том, что она имеет тот же характер,что и правила КС-грамматики. Следовательно, подстановка цепочек КС-языка в другой КС-язык может быть представлена как подстановка КС-грамматики в другую КС-грамматику, дающая снова КС-грамматику. Отсюда следует, что класс КС- языков замкнут относительно операций подстановки и конкатенации. Операция итерации. Объединение множества языков Li, каждый из которых порожден языком L путем многократного умножения, называют итерацией языка, т.е. L* = L0 È L1 È L2 È... È Ln=i=0ÈnVi, где L0 = { e }. (37) Если i = 1,2,...n, то итерацию называют усеченной, т.е. L* = L1 È L2 È... È Ln=i=1ÈnVi (38)
Заключение
Рассмотренные классы формальных языков, правил формирования цепочек символов, алгоритмы разбора синтаксических конструкций позволяют автоматизировать синтаксический анализ текстов. Эти идеи нашли широкое применение в разработке программных и технических средств современных вычислительных машин. Программа или техническое средство, выполняющие преобразование исходной программы, написанной на языке высокого уровня, в объектные модули языка вычислительной машины называется транслятором. Для организации такого преобразования необходимо знать алфавиты языков высокого уровня и вычислительной машины, правила построения синтаксических конструкций текстов, написанных на языке высокого уровня и объектных модулей на языке вычислительной машины. Эти знания заложены в синтаксис соответствующего языка. Как правило, для языка высокого уровня это - КС-грамматика, для языка вычислительной машины это - система команд. Если текст исходной программы написан синтаксически верно, то следующим шагом выполняется семантический анализ текста, подготовка и генерация системы команд вычислительной машины. Эти работы определяются типом вычислительной машины и его языком.
Контрольные вопросы и задачи
1. Дайте формальное определение языка для формирования: а) множества целых положительных чисел; b) множества слов русского языка; с) множества идентификаторов языка программирования. 2. Пусть VT={ 0;1;2 }, а также a = 01, b = 2, g = 011. Выпишите следующие цепочки: ab, ba, abg, a4, a4b2, (b ag)3. Опишите их длины,головы и хвосты. 3. Пусть дана грамматика G = á VT; VN; P; J ñ, где VT = {a,b,c}, VN = {A,B,J}, J Î VN, P = { p1 = J::= aB; p2 = B::= A; p3 = B::= b; p4 = A::= c }. Докажите истинность или ложность вывода следующих цепочек: a) J =>...=> a; b) J =>...=> ac; c) B =>...=> Ac; d) aJ =>...=> aab; e) aBb =>...=> acb. Какой тип грамматики? 4. Опишите грамматику, язык которой состоит из множества четных целых чисел. 5. Опишите грамматику, язык которой состоит из нечетной последовательности символа "a". 6. Пусть дана грамматика G = á VT; VN; P; J ñ, где VT = {a}, VN = {A,J}, J Î VN, P ={ p1 = J::= a; p2 = J::= aJa }. Цепочки какого языка генерирует грамматика? 7. Пусть дана грамматика G = á VT; VN; P; J ñ, где VT = {a,b}, VN = {A,B,J}, J Î VN, P = { p1 = J::= B; p2 = J::= AJ; p3 = AJ::= a; p4 = B::= b }. Цепочки какого языка генерирует грамматика? 8. Пусть дана грамматика G = á VT; VN; P; J ñ, где VT = {a,b}, VN = {A,B,J}, J Î VN, P = { p1 = J::= aA; p2 = A::= a; p3 = A::= B; p4 = B::= b B p5 = B::= b}. Цепочки какого языка генерирует грамматика? 9. Дано множество правил P = { p1 = J::= ABA; p2 = A::= Ca; p3 = A::= bA; p4 = C::= d }. Найти матрицы связей, таблицы подстановок, синтаксические деревья и их двоичные эквиваленты для цепочки, начинающейся с символа "d". 10. Дано множество правил P = { p1 = J::= ABA; p2 = J::= DE; p3 = A::= Ca; p4 = B::= bC; p5 = C::= c; p6 = D:: E; p7 = E::= cJC }. Найти матрицы связей, таблицы подстановок, синтаксические деревья и их двоичные эквиваленты для цепочки, начинающейся с символа "c". 11. Нарисуйте синтаксические диаграммы языка программирования Паскаль для синтаксических переменных: <идентификатор>, <программа>, <целое_без_знака>, <терм>, <простое _выражение>, <конец_блока>, <заголовок_программы>. 12. Используя грамматику арифметических выражений (пример 14), постройте дерево разбора и его двоичный эквивалент для выражений: a) a x (a + b) / c; b) (a + b) / c; c) (a + b) x (a - c) / (b - c).
Индивидуальное задание
Дана грамматика G = á VT; VN; P; J ñ, где VT = { a, b, c } È { (,), +, -, x, / }, VN = {<арифм_выражение:-J>, < терм:- T>, <множитель: -M>, <операнд: - K>, <операция_сложения: - S1>, <операция_умножения: -S2>, <вспом_символ:-S3>}, J - начальный символ грамматики, P ={ p1 = J::= T | JS1T; p2 = T::= M | TS2M; p3 = M::= K| S31JS32; p4 = S1::= "+" | "-"; p5 = S2::= "x" | "/"; p6 = K::= "a" | "b" | "c"; p71= S31::= "("; p72= S32::= ")" }. Нарисовать по заданию варианта: 1) синтаксические диаграммы для подмножества правил {pi;pj;pk}; 2) синтаксическое дерево для арифметического выражения; 3) двоичное дерево для арифметического выражения. Выполнить грамматический разбор арифметического выражения для вариантов 1 - 30 по алгоритму " сверху-вниз", для вариантов 31 - 60 по алгоритму "снизу-вверх".
Дата добавления: 2015-06-27; Просмотров: 1107; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |