Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_po_matematicheskoy_logike.doc
Скачиваний:
1
Добавлен:
04.08.2019
Размер:
313.34 Кб
Скачать
  1. Двоичное дерево. Грамматический разбор цепочки терминальных символов “снизу-вверх”.

см. вопросы 38, 37.

Первым шагом в разборе цепочки является поиск маршрута среди левых поддеревьев по матрице связей от вершины, соответствующей первому слева символу цепочки, до первого узла двоичного дерева. Этот узел является кандидатом на корень куста, а правило грамматики определяет переход к таблице постановок для задания начальных вершин левых поддеревьев. Следующим шагом выполняется поиск маршрута среди левых поддеревьев от концевой вершины, соответствующей следующему символу цепочки, до первой начальной вершины. Порядок следования начальных вершин максимальных левых поддеревьев задан порядком их записи в таблице подстановок. Если для узла маршруты от концевых вершин до всех начальных вершин найдены правильно, то данный узел является корнем куста, а разобранная часть цепочки синтаксически правильной.

Следующим шагом определяется маршрут от корня куста до очередного узла среди левых поддеревьев по матрице связей. Далее процесс поиска маршрутов между вершинами следующих символов цепочки и найденным узлом повторяется. Найденный очередной куст свидетельствует о синтаксической правильности очередной подцепочки терминальных символов. Найденный маршрут между последним символом цепочки и начальным символом грамматики J заканчивает грамматический разбор всей цепочки снизу-вверх.

  1. Операции над языками.

Несмотря на то, что формальные языки представляют собой множество цепочек вида L(G) = {а | аО V*}, использование теоретико- множественных операций ограничено. Так для класса КС-языков можно применять операции объединения, но недопустимо использовать операции пересечения и дополнения. Если дан язык L(G) = {а | аО V*}, то дополнением языка щ L(G) будет множество цепочек, не принадлежащих V*. Это могут быть любые цепочки любых символов. Следовательно, такое множество не определено. Если даны два языка L1 и L2, то операцию их пересечения можно записать так: (L13L2) = щ (щ L1 ищ L2). Но множество цепочек языков щ L1 и щ L2 не определено. Следовательно, невозможно реализовать операцию пересечения двух языков L1 и L2. Поэтому говорят, что класс КС-языков замкнут для операции объединения и не замкнут для операций пересечения и дополнения. Были выделены дополнительные операции умножения, деления, подстановки, итерации, расширившие возможности формирования новых цепочек и новых языков.

Операция умножения. Если даны цепочки а12О V* одного языка L(G) Н V*, то бинарная операция умножения ставит в соответствие каждой паре цепочек а1 и а2 новую цепочку а1a2, полученную в результате приписывания справа к цепочке а1 цепочки а2.

Операцию умножения чаще называют конкатенацией или операцией соединения.

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

Можно также говорить о конкатенации языков L1 и L2. При этом формируется новый язык:

L = L1 L2 = { а1а2| а1O L1HV1*,a2OL2Hv2*} Н. V1*Д V2*.

Если L1 = L2 = L, то операцию конкатенации можно записать как обычную мультипликативную операцию, т.е.

LL=L2,LLL=L3 и т. д.

Для пустой цепочки е выполняется соотношение e а = а е = а, для любого аО V*. Операция конкатенации - ассоциативна, т.е. (а1а23 = а12а3) = a1a2a3. Можно отметить, что алгебра с одной ассоциативной бинарной операцией - умножением называется полугруппой.

Операция деления. Пусть a1=g1g2OL1HV1* и a2=g2OL2HV2*,

Если для цепочек двух языков L1 и L2 существуют одинаковые "хвосты", то в результате выполнения операции деления будут выделены цепочки, являющиеся "головами" для цепочек языка L1, т.е.

L = L1/L2 = {g1| g1g2OL1HV1*, g2OL2HV2*).

пусть a2=g2g1OL1Hv1* и a2=g2OL2Hv2*,

Если для цепочек двух языков L1 и L2 существуют одинаковые "головы", то в результате выполнения операции деления будут выделены цепочки, являющиеся "хвостами" для цепочек языка L1. т. е.

L=L1/L2={g1|g2g1OL1HV1*, g2OL2HV2*}.

Операция подстановки. Пусть даны язык L с грамматикой

G=δVT; VN;J: PC и язык L1, с грамматикой G1=δVT1;VN1;J1;P1C. Среди множества терминальных символов языка L выделен символ "а", определяющий возможность перехода к языку L1, т.е. "а" OVT и ("а" ®L1). Тогда при появлении символа "а" в цепочке аО L оказывается возможным выполнить подстановку цепочки а1O L1. Так формируется новый язык:

L*=L("a" ®L1).

Если дано множество языков L1, L2, ...Ln и язык L, у которого среди множества терминальных символов выделены символы "а1","а2",..."аn", то для цепочки aOLHV*, содержащей символ "аi", возможен переход к языку Li путем замены символа "аi" цепочкой aiOLiHVi*. Так формируется язык L*=L("ai"®Li). Обобщением этой операции на множество языков является подстановка нескопьких языков в язык L при которой вместо каждого вхождения символа "аi" подставляется некоторая цепочка соответствующего языка, т.е.

L*=("a1"®L1,"a2"®L3,..."an"®Ln).

Операции над языками Li и L, где i = 1, 2....n, порождающие цепочки нового языка а*O L* путем замены символов "ai" языка L цепочками соответствующего языка аiO Li и подстановки их в цепочки аО L Н V* называют также суперпозицией, а оператор суперпозиции записывают так:

S(L; "a1"; "a2";... "an"IL1,L2,...Ln).

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

Операция итерации. Объединение множества языков Li, каждый из которых порожден языком L путем многократного умножения, называют итерацией языка, т.е.

L* = L0 И L1 И L2 И... И Ln=i=0ИnVi, где L0 = {e}.

Если i = 1,2,...n, то итерацию называют усеченной, т. е. L* = L1 И L2 И... ИLn=i=1ИnVn

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]