Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц_ИТ_1.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.41 Mб
Скачать

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

Класс контекстно-свободных языков замкнут относительно объединения и не замкнут относительно пересечения и дополнения. Это говорит о том, что теоретико-множественные операции, за исключением объединения, не имеют естественной синтаксической интерпретации. С этой точки зрения большой интерес представляют операции, связанные с подстановками языка в язык [ 3 ].

Пусть L0 - язык, заданный грамматикой:

G0 = {V0 , W0 , R0 , I 0}, a  V0;

L1 - язык, заданный грамматикой G1 = {V1 , W1 , R1 , I1} .

Определение. Подстановка языка L1 в язык L0 вместо символа a - это операция, сопоставляющая языкам L0 и L1 язык L = L0 ( a  L1 ), состоящий из всех цепочек L0, в которых вместо символа a подставлена некоторая цепочка из L1.

Обобщением рассмотренной подстановки является подстановка

L = L0 ( a1  L1 , ... , ak  Lk) нескольких языков.

Пример. Пусть заданы языки вида:

L0 = { a, ( a + a ), ( a + a + a), ... } L1 = { b, bb, bbb, ... }

требуется выполнить подстановку L1 в L0.

Решение. Подстановка L1 в L0 будет иметь вид:

L = L0 ( a  L1 ) = L = { b, bb, bbb,...,( b + b), (bb + b), ...}.

Определение. Конкатенация языков L0 и L1 - эта операция

L0L1, сопоставляющая языкам L0 и L1 язык L, содержащий цепочки, представляющие собой парное сцепление цепочек языков L0 и L1.

Пример. Пусть заданы языки вида:

L0 = { a, (a+a), (a+a+a), ... } L1 = { b, bb, bbb, ... }

требуется выполнить конкатенацию L1 и L0.

Решение. Конкатенация L1 и L0 будет иметь вид:

L = L0L1 = { ab, abb, abbb, ( a+a )b, ...}.

Введем в рассмотрение степенные обозначения конкатенаций

LL=L2 , LLL=L3, ... .

Подстановки будем обозначать следующим образом:

Определение. Итерацией L* языка L называется язык вида:

L* = {  }  L  L2  ...  Ln ,

где {  } - пустая цепочка.

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

L {} = {} L = L, а L =  для любого L.

2.5. Право-линейная и автоматная грамматики

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

Правила право линейной грамматики имеют вид:

A   B, A  ,   V* , B  W.

Определение. Грамматика называется автоматной, если ее правила имеют вид:

A  x B, A  x, A  , x  V, B W.

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

Пример. Преобразовать грамматику, заданную правилами вида:

  1. S  a A 4. A  a b b S

2. S  b c 5. A  c A

3. S  A 6. A  

к автоматной.

Решение. Последовательно будем вводить новые нетерминалы в

тех правилах, где необходимо обозначить цепочку нетерминалов и терминалов или одних терминалов одним символом. Новые правила примут вид:

1. S  a A 6. S  

2. S  b К1 7. A  a K2

3. K1  c 8. K2  b K3

4. S  a K2 9. K3  b S

5. S  c A 10. A  c A

  1. A  