Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по теории алгоритмов.doc
Скачиваний:
68
Добавлен:
27.05.2015
Размер:
2.89 Mб
Скачать

Раздел 2. Формальные языки и грамматики

Лекция № 9. Иерархия формальных языков и грамматик

  1. Понятие формального языка

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

  3. Порождающие грамматики

  4. Иерархия языков по Хомскому

1. Понятие формального языка

Определение 9.1.1. Конечное непустое множество называется алфавитом, его элементы называются символами (буквами).

Определение 9.1.2. Конечная последовательность символов алфавита A называется словом в алфавите A.

Пример 9.1.1. Пусть A={а, б, в}. Тогда баба, ваб, ббб – слова в алфавите A, при этом осмысленность слов не предполагается.

Определение 9.1.3. Слово, не содержащее ни одного символа, называется пустым и обозначается .

Множество всех слов в алфавите А будем обозначать А*, а через А+ – множество всех непустых слов.

Определение 9.1.4. Число символов в слове w называется длиной слова w и обозначается  w. Длина пустого слова по определению равна нулю.

Определение 9.1.5. Конкатенацией слов x и y называется слово, обозначаемое как xy (или xy) и получающееся в результате приписывания слова y в конец слова x .

Если w – слово, то через wn (n=1, 2, …) обозначается слово:

(при n=0 полагается, что wn=), а через  wа – число вхождений буквы а в слово w.

Так как

,

а множество слов данной длины конечно, то множество А* счетно.

Определение 9.1.6. Любое подмножество L множества А* (L А*) называется формальным языком (языком) над алфавитом А.

Определение 9.1.7. Язык А*L называется дополнением языка L относительно алфавита А.

Так по определению любой формальный язык представляет собой множество, то над языками, заданными над одним и тем же алфавитом, можно обычным образом определить операции объединения, пересечения и разности.

Пример 9.1.1. Пусть над алфавитом А={a, b} заданы формальные языки L1={(ab)n: n0} А* и L2={ambm: m0} А*. Тогда пересечением этих языков будет язык L1L2={, ab} А*.

Задача 9.1.1. Пусть над алфавитом А={a, b} заданы формальные языки L1={w А*: w=3} А* и L2={w А*: wа =1} А*. Сколько слов содержит язык L1 L2.

Решение. Язык L1 содержит 8 слов из трех букв: aaa, aab, aba, abb, baa, bab, bba, bbb. Буква а ровно один раз входит в 3 слова: abb, bab, bba. Таким образом, язык L1 L2 содержит 5 слов.

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

Определение 9.2.1. Конкатенацией языков L1, L2 А* называется язык L1L2={xy: xL1, yL2}.

Определение 9.2.2. Пусть LА*. Тогда L0={}, L1=L, Ln+1= LnL (n=1, 2, …).

Пример 9.2.1. Пусть А={a, b}, L={aa, ab}. Выпишем все слова языка L2 в следующей таблице:

aa

ab

aa

aaaa

aaab

ab

abaa

abab

Заметим, что L2={(aa)n(ab)m(aa)k: m, n0, m+n+k=2}.

Слова языка L3 могут быть получены следующим образом:

aa

ab

aaaa

aaaaaa

aaaaab

abaa

abaaaa

abaaab

aaab

aaabaa

aaabab

abab

ababaa

ababab

Попутно заметим, что L3{(aa)n(ab)m(aa)k: m, n0, m+n+k=3}, поскольку ababab{(aa)n(ab)m(aa)k: m, n0, m+n+k=3}.

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

.

Пример 9.2.2. Если А={a, b} и L={aa, ab, ba, bb}, то:

L*={wA* : wmod 2=0}.

Определение 9.2.4. Обращением (зеркальным образом) слова w называется слово, записанное теми же буквами в обратном порядке (обозначается wR).

Например, если w=abab, то wR=baba.

Определение 9.2.5. Пусть LA*. Тогда язык LR={wR : w L} называется обращением языка L.

Пример 9.2.3. Если А={a, b} и L={aa, ab, ba, bb}, то LR=L.

Пример 9.2.4. Если А={a, b} и L={anbm : n1, m1}, то LR={bman : n1, m1}.

Определение 9.2.5. Пусть А1 и А2 алфавиты. Отображение H:A1* A2*, удовлетворяющее условию H(uw)=H(u)H(w) для любых u, w A1*, называется гомоморфизмом (морфизмом).

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

Пример 9.2.5. Пусть А={a, b}. Определим гомоморфизм H:A*A* равенствами H(a)=b, H(b)=a. Тогда H(aaabb)=bbaaa и т.д.

3. Порождающие грамматики

Определение 9.3.1. Порождающей грамматикой (грамматикой типа 0) называется четверка G=<N, A, P, S>, где:

а) N – конечный алфавит, называемый нетерминальным (вспомогательным) алфавитом, символы которого будем обозначать прописными латинскими буквами;

б) А – конечный алфавит, именуемый основным (терминальным) алфавитом, символы которого будем обозначать строчными латинскими буквами;

в) АN=;

г) P – конечное подмножество декартового произведения:

P (NA)+  (NA)*,

при этом пары (, )P называются правилами подстановки (просто правилами или продукциями) и записываются в виде ;

д) S – нетерминальный символ (SN), называемый начальным символом.

Пример 9.3.1. Пусть N={S}, A={a, b}, P={SabS, Sa}. Тогда G=<N, A, P, S> – является порождающей грамматикой.

Определение 9.3.2. Пусть дана порождающая грамматика G=<N, A, P, S>. Говорят, что слово v непосредственно выводимо из слова w (пишут w v), если w=, v= при некоторых словах , , , в алфавите NA и P.

Пример 9.3.2. Пусть N={S}, A={a, b}, P={SabS, Sa}. G=<N, A, P, S> –порождающая грамматика.

Тогда S abS, Sa, abSaba, abS ababS, ababSababa.

Определение 9.3.3. Пусть дана порождающая грамматика G. Говорят, что слово wn выводимо из слова w0 (пишут w0 wn), если

w0 w1w2wn (n0).

Пример 9.3.3. Пусть N={S}, A={a, b}, P={SabS, Sa}. G=<N, A, P, S> – порождающая грамматика.

Тогда Sa, Saba, Sababa, Sa(ba)m, abSababS и т.д.

Определение 9.3.4. Множество L(G)={wA*: Sw} называется языком, порождаемым грамматикой G=<N, A, P, S>. Также говорят, что грамматика G порождает язык L(G).

Пример 9.3.4. Пусть N={S}, A={a, b}, P={SabS, Sa}. G1=<N, A, P, S> – грамматика, порождающая язык

L(G1)={a(ba)m: m0}.

Пример 9.3.5. Пусть N={S, F}, A={a, b}, P={SFF, FaFb, Fab}. G2=<N, A, P, S> – грамматика, порождающая язык

L(G2)={anbnambm: n1, m1}.

Определение 9.3.5. Две грамматики называются эквивалентными, если они порождают один и тот же язык.

Пример 9.3.6. Пусть N={S, F}, A={a, b}, P={SaF, FbaF, F}. G3=<N, A, P, S> – грамматика, порождающая язык

L(G3)={a(ba)m: m0}.

Грамматика G3 эквивалентна грамматике G3 (см. пример 9.3.4).