Студопедия

КАТЕГОРИИ:


Архитектура-(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 по алгоритму "снизу-вверх".

 

номер варианта индексы i, j, k арифметическое выражение номер варианта индексы i, j, k
  1,2,3 ((a + b) x c) + (a - b) / c   2,5,6
  1,2,4 ((a + b) / c) - (a -b) / b   2,5,71
  1,2,5 ((a2 - b2) x c - b) / c   2,5,72
  1,2,6 (a3 + b2)/ (c + b)   2,6,71
  1,2,71 ((a + b) - c)/ (b + c)   2,6,72
  1,2,72 (a - b) / (c2+ a)   3,4,5
  1,3,4 (a + b) / (b2 x (a - c))   3,4,6
  1,3,5 (a2 + b2) / (b x a - c)   3,4,71
  1,3,6 (a + b2) / (b2 + c2)   3,4,72
  1,3,71 (a2 + b2) / (b2 - c)   3,5,6
  1,3,72 (a2 + b2) x (b - c)   3,5,71
  1,4,5 (a2 - b x (a - c)) x c   3,5,72
  1,4,6 ((a2 - c) x b) x c2)   3,6,71
  1,4,71 (a - c) x (b2 + c)   3,6,72
  1,4,72 a + b + c2 - b2   4,5,6
  1,5,6 a2 + b2 +c - b   4,5,71
  1,5,71 a2 / (b2 - a + c)   4,5,72
  1,5,72 a / (b2 - a2-c)   4,6,71
  1,6,71 a x (b2 +a2 - c)   4,6,72
  1,6,72 a x (b + a2 -c)   5,6,71
  2,3,4 a / (b - c) +(a + c)   5,6,72
  2,3,5 a2 x b2 + (a - c))   6,5,4
  2,3,6 a2 - b2 - c2   6,5,3
  2,3,71 (a2 -b) / (b2 - c)   6,5,2
  2,3,72 a x (((a + b)/ b + c) - a)   6,5,1
  2,4,5 a / (((a - c) x b - a) + b)   5,4,3
  2,4,6 a + ((a x (b + c)- a) - b)   5,4,2
  2,4,71 a - (a - (b x c + c) + b)   5,4,1
  2,4,72 a - (a x ((b - c) / a - c))   4,3,2
  2,5,71 a / (a x ((b+c) 2 -a))   4,3,1

 




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


Дата добавления: 2015-06-27; Просмотров: 1082; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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