Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пономарев_ФЯиГ.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.42 Mб
Скачать

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

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

Операция умножения. Если даны цепочки , V* одного языка L(G) V*, то бинарная операция умножения ставит в соответствие каждой паре цепочек  и новую цепочку полученную в результате приписывания справа к цепочке  цепочки 

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

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

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

L = L1 L2 = { 121 L1V1*2L2V2*} . V1* V2* . ( 28 )

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

LL = L2, LLL = L3 и т.д. ( 29 )

Для пустой цепочки  выполняется соотношение

  = , для любого  V*. ( 30 )

Операция конкатенации - ассоциативна, т.е.

( 12)3 = 1(23) = 123 . ( 31 )

Можно отметить, что алгебра с одной ассоциативной бинарной операцией - умножением называется полугруппой.

Операция деления. Пусть 1=12L1V1* и 2=2L2V2*,

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

L = L1/L2 = { 1 | 12L1V1*, 2L2V2* } . ( 32 )

Пусть 2=21L1V1* и 2=2L2V2*,

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

L=L1/L2={1 | 21L1V1*, 2L2V2* } . ( 33 )

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

G=VT; VN;J; P и язык L1 с грамматикой G1=VT1;VN1;J1;P1. Среди множества терминальных символов языка L выделен символ "a", определяющий возможность перехода к языку L1, т.е. "a" VT и ("a" L1)Тогда при появлении символа "a" в цепочке  L оказывается возможным выполнить подстановку цепочки 1 L1. Так формируется новый язык :

L* = L ( "a" L1). ( 34 )

Если дано множество языков L1, L2, ...Ln и язык L, у которого среди множества терминальных символов выделены символы "a1","a2",..."an", то для цепочки LV* , содержащей символ "ai", возможен переход к языку Li путем замены символа "ai" цепочкой iLiVi*. Так формируется язык L*=L("ai"Li). Обобщением этой операции на множество языков является подстановка нескольких языков в язык L , при которой вместо каждого вхождения символа "ai" подставляется некоторая цепочка соответствующего языка, т.е.

L* = ( "a1"L1, "a2"L2, ... "an"Ln ). ( 35 )

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

S(L; "a1"; "a2"; ... "a2"| L1,L2,...Ln ). ( 36 )

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

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

L* = L0  L1 L2 ...  Ln=i=0nVi , где L0 = {  }. ( 37 )

Если i = 1,2,...n, то итерацию называют усеченной, т.е.

L* = L1 L2 ...  Ln=i=1nVi ( 38 )