Решение избранных задач по ... - uCoz
Transcript of Решение избранных задач по ... - uCoz
федеральное агентство по образованиюмосковский государственный индустриальный университет
кафедра «информационные системы и технологии»информационно-вычислительный центр
Автор курса:Абрамов И.В.
Решение избранных задач по курсу«Теория Автоматов, Языков и Вычислений»
Авторы решений:Алексеев М.А.Алексеев С.А.Моргунов С.А.
Москва 200625.12
2
1. Приведите примеры не менее чем пяти языков в алфавитеΣ = a, b, c, d, e.
Теория.Определение. Языком в алфавите Σ называется множество цепочек вΣ.Решение.
L1 = ab, bc, cd, deL2 = aibicidiei | i > 0L3 = ωωR | ω ∈ a, b, c, d, e∗L4 = (ae)i(bdc)j | j − 1 = i > 0L5 = dead, bad
2. Напишите регулярные выражения для следующих языков:(a) множество цепочек над алфавитом a, b, c, содержащих хотя
бы один символ a и хотя бы один символ b;(б) множество цепочек из нулей и единиц, в которых десятый от
правого края символ равен 1;(в) множество цепочек из нулей и единиц, содержащих не более
одной пары последовательных единиц.
Теория.Определение. Регулярные выражения в алфавите Σ и регулярные мно-жества, которые они обозначают, определяются рекурсивно следующимобразом:(1) ø — регулярное выражение, обозначающее регулярное множество
ø,(2) ε — регулярное выражение, обозначающее регулярное множество
ε,(3) если a ∈ Σ, то a — регулярное выражение, обозначающее регуляр-
ное множество a,(4) если p и q — регулярные выражение, обозначающие регулярные
множества P и Q соответсвенно, то(a) (p + q) — регулярное выражение, обозначающее P ∪Q;(b) (pq) — регулярное выражение, обозначающее PQ;(c) (p)∗ — регулярное выражение, обозначающее P ∗;
(5) ничто другое не является регулярным выражением.
Решение.(a) (a + b + c)∗((a+(a + c)∗b+) + (b+(b + c)∗a+))(a + b + c)∗
(б) (0 + 1)∗1(0 + 1)9
(в) (0 + 10)∗(11)?(0 + 01)∗
3
3. Постройте праволинейные грамматики для языков, состоящих из(a) идентификаторов произвольной длины, состоящих из букв и
цифр, но начинающихся с буквы (например, как в языке Си);(б) идентификаторов, которые должны содержать от одного до
шести символов и начинаться с буквы I, J, K, L, M или N ;(в) целочисленные константы языка Си (напомним, что целочис-
ленные константы в Си бывают восьмеричные, десятичные ишестнадцатеричные, а в конце может следовать суффикс, за-дающий тип и знаковость константы);
(г) вещественных констант языка Си;(д) всех цепочек из нулей и единиц, имеющих чётное число нулей
и чётное число единиц.
Теория.Грамматика G называется праволинейной, если каждое правило из P
имеет вид A → xB или A → x, где A,B ∈ N,x ∈ Σ∗.Решение.(a) S → aA′ | . . . | zA′ | AA′ | . . . | ZA′
A′ → aA′ | . . . | ZA′ | 0A′ | . . . | 9A′ | ε
(б) S → IA′ | . . . | NA′
A′ → aB′ | . . . | ZB′ | 0B′ | . . . | 9B′ | εB′ → . . .C ′ → . . .D′ → . . .E ′ → a | . . . | Z | 0 | . . . | 9 | ε
(в) S → 0A′ | 0D′ | . . . | 9D′
A′ → xB′ | 0C ′ | . . . | 7C ′
B′ → 0B′ | 1B′ | . . . | 9B′ | aB′ | . . . | fB′ | AB′ | . . . | FB′ |0z′ | 1z′ | . . . | 9z′ | az′ | . . . | fz′ | Az′ | . . . | Fz′
C ′ → OC ′ | . . . | 7C ′ | z′
D′ → OD′ | . . . | 9D′ | z′
z′ → u | l | ul | lu | U | L | UL | LU | ε
(г) S → 0S | . . . | 9S | .A | 0A | . . . | 9A | 0D | . . . | 9DA → 0A | . . . | 9A | eD | e−D | e + D | 0D | . . . | 9DD → 0D | . . . | 9D | z′
z′ → l | L | ε
4
(д) A → 0C | 1B | εB → 0D | 1AC → 0A | 1DD → 0B | 1C
4. Постройте КС-грамматики, порождающие(a) все цепочки из нулей и единиц с одинаковым числом тех и
других;(б) a1a2 . . . anan . . . a2a1 | ai ∈ 0, 1, 1 6 i 6 n;(в) 0i1j | i 6= j и i, j > 0;(г) всевозможные последовательности правильно расставленных
скобок.
Теория.Грамматика G называется контекстно-свободной, если каждое правилоиз P имеет вид A → α, где A ∈ N,α ∈ (N ∪ Σ)∗.Решение.(a) S → 0AS | A0S | ε
A → 0AA | AA0 | 1
(б) S → 0S0 | 1S1 | ε
(в) S → 0S1 | AA → 1B | 0C | 1 | 0B → 1B | 1C → 0C | 0
(г) S → (S) | ()S | ε
5. Следующая грамматика порождает язык регулярного выражения0∗1(0 + 1)∗.
S → A1BA → 0A | εB → 0B | 1B | ε
Запишите левый и правый вывод, а также нарисуйте деревья вы-вода следующих цепочек:(a) 00101;(б) 1001;(в) 00011.
5
Теория.Определение. Вывод, при котором каждый раз правило применяетсяк самому левому нетерминалу, называется левым выводом. Аналогичноопределяется правый вывод.Определение. Дерево вывода в грамматике G = (N,Σ, P, S) — это по-меченное упорядоченное дерево, каждая вершина которого помеченасимволом из множества N ∪ Σ ∪ ε. Если внутренняя вершина поме-чена символом A, а ее прямые потомки — символами X1X2 . . . Xn, тоA → X1X2 . . . Xn — правило этой грамматики.Решение.(a) левый вывод: S → A1B → 0A1B → 00A1B → 001B →
0010B → 00101B → 00101правый вывод: S → A1B → A10B → A101B → A101 →0A101 → 00A101 → 00101
(б) левый вывод: S → A1B → 1B → 10B → 100B → 1001B →1001правый вывод: S → A1B → A10B → A100B → A1001B →A1001 → 1001
6
(в) левый вывод: S → A1B → 0A1B → 00A1B → 000A1B →0001B → 00011B → 00011правый вывод: S → A1B → A11B → A11 → 0A11 → 00A11 →000A11 → 00011
7
6. Постройте КЗ-грамматики, порождающие(a) an2 | n > 1;(б) ωω | ω ∈ a, b+;(в) ω | ω ∈ a, b, c+ и число букв a в цепочке ω равно числу букв
b, равному числу букв c;(г) ambnambn | m, n > 1.
Теория.Определение. Грамматика G называется контекстно-зависимой, есликаждое правило из P имеет вид α → β, где |α| 6 |β|.Решение.(a) В начале составим цепочку вида B aaa . . . aAa︸ ︷︷ ︸
n + 1
FE, где B, A, F
и E нетерминалы определенного назначения. Сделаем это спомощью правил:
S → BTaFET → aT | A
Теперь будем A продвигать влево до B и при переходе черезкаждый символ a будем создавать новый нетерминал C. На-ша цепочка примет вид BAaCaC . . . CaFE. Тем самым коли-чество C равно n−1 и означает, что нужно создать n−1 копиюисходной цепочки из символов a, полученной на предыдущемшаге, чтобы получить n2 самих символов a. (Замечание. n− 1по той причине, что одна копия строки из n символов a у насимеется с самого начала). Для описанных действий в грамма-тику добавится правило:
aA → AaCНазначение символа A себя исчерпало, так что дойдя доB он нам уже не нужен. В этот момент заведём специаль-ный символ Z, для которого опишем ε-правило и с его помо-щью избавимся от A. В результате наша цепочка примет видBaCaC . . . aCaFE, а в грамматику добавятся:
BA → BZZ → ε
Следующий шаг заключается в перемещении всех символов Cк символу E. Для этого нам нужно организовать беспрепят-ственный переход C через a и F . В итоге мы получим цепочкуB aaa . . . a︸ ︷︷ ︸
nF CC . . . C︸ ︷︷ ︸
n− 1
E. Правила, выполняющие это действие
описаны ниже.
8
Ca → aCCF → FC
Теперь из каждого нетерминала C, использую рядом стоящийспециальный символ E, создадим новый нетерминал D, кото-рый в последвии примет участие в непосредственном копиро-вании нашей исходной цепочки. Также заметим, что необходи-мо обеспечить свободный переход символов C, через появив-шиеся D, чтобы они могли переместиться к E и замениться насимвол D. После замены всех символов C получим цепочкуB aaa . . . a︸ ︷︷ ︸
nF DD . . . D︸ ︷︷ ︸
n− 1
E, а в грамматику запишем следующее:
CE → DECD → DC
Теперь будем непосредственно реализовывать копирование ис-ходной цепочки. Для этого каждый символ D будем перетаски-вать через всю цепочку к B и переходя через каждый символ aбудем создавать новый нетерминал Y , который в последствиии превратится в терминалы a нашей цепочки. Всего символовD, у нас n − 1, а это и есть то количество копий цепочки,которое необходимо создать. Поэтому переместив все D к Bмы создадим столько нетерминалов Y , сколько нам не хва-тало, чтобы количество символов a стало равным n2. Но нестоит забывать, что D может столкнуться с F и появивши-мися Y , и в этом случае необходимо реализовать свободныйпереход D через F и Y . В результате цепочка примет видB DDD . . .D︸ ︷︷ ︸
n− 1
aY . . . Y a︸ ︷︷ ︸n2
FE, а в грамматику допишем правила:
aD → DaYY D → DYFD → DF
Заметим, что символ D нам больше не понадобится, поэтомуот него можно избавиться. Наша цепочка упростится и приметвид B aY . . . Y a︸ ︷︷ ︸
n2
FE. И для реализации этого шага грамматике
потребуется одно новое правилоBD → BZ
Далее следует все нетерминалы Y заменить символами a. Дляэтого нам нужно реализовать свободный проход Y через x иF , а потом при переходе через E заменять его символом a.
9
Т.е. сначала цепочка станет B aa . . . a︸ ︷︷ ︸n
F Y Y . . . Y︸ ︷︷ ︸n(n− 1)
E, потом при-
мет вид B aa . . . a︸ ︷︷ ︸n
FE aa . . . a︸ ︷︷ ︸n(n− 1)
. Вышеописанные действия вы-
полнят следующие правила грамматики:Y a → aYY F → FYY E → Ea
Теперь осталось только избавиться от нетерминальных симво-лов B и E. Перенесем F к B посредством свободного переходаF через a. А потом уничтожим B и F , создав новый символG. Наша цепочка преобразуется в Gaa . . . aEaa . . . a. И в грам-матику добавятся правила:
aF → FaBF → GZ
Теперь осталось переместить G к E и и оба их удалить. Дляэтого нам понадобятся правила:
Ga → aGGE → ZZ
В итоге грамматика запишется таким образом:S → BTaFET → aT | AaA → AaCBA → BZZ → εCa → aCCF → FCCE → DECD → DCaD → DaYY D → DYFD → DFBD → BZY a → aYY F → FYY E → EaaF → FaBF → GZGa → aGGE → ZZ
10
(б) Изначально создадим либо цепочку aCAD, либо bCBD. За-тем используя нетерминал C придадим цепочке необходимуюдлинну, причем с появлением терминала будет появляться иего нетерминальный аналог, дабы в результате получить це-почку из двух одинаковых половинок – ωω. Для описанныхдействий в грамматику добавятся правила:
S → aCAD | bCBDC → aCA | bCB | ε
В результате получим цепочку вида ωΩRD, где ω ∈ a, b, Ω ∈A, B. Теперь нам нужно заменить A и B на соответсвующиеим терминалы a и b. Для этого воспользуемся маркером D. Бу-дем постепенно перемещать все нетерминалы к D, менять ихна соответсвующие терминалы, которые в свою очередь будутперемещаться к центру, чтобы в итоге мы получили цепочкуωω. Правила грамматики, осуществляющие соответсвующуюзамену и перемещение описаны ниже:
AD → aDBD → bDAa → aAAb → bABa → aBBb → bBD → ε
В итоге грамматика состоит из следующих правил:S → aCAD | bCBDC → aCA | bCB | εAD → aDBD → bDAa → aAAb → bABa → aBBb → bBD → ε
(в) На начальном этапе создадим нужное количество символов aв цепочке. И на концах цепочки поставим специальные нетер-минальные символы. В итоге, используя нижеперечисленныеправила, получим цепочку вида GaAaA . . . aAE.
S → GaAFEF → aAF | ε
11
Теперь переместим все A к E, используя свободный пе-реход через терминал a. В результате получим цепочкуG aa . . . a︸ ︷︷ ︸
nAA . . . A︸ ︷︷ ︸
nE. А затем E используем для превращения
каждого A в пару BC. Для этого в грамматику запишутсяправила:
Aa → aAAE → EBC
Наша цепочка теперь представляет собойG aa . . . a︸ ︷︷ ︸
nE BCBC . . . BC︸ ︷︷ ︸
2n
. Далее нужно избавиться от
символа E. Для этого переведем G к E и используя ε-правилоуничтожим их. Для это необходимы следующие правила:
Ga → aGGE → ZZZ → ε
Ну и наконец осталось только выстовить символы в нужнойпоследовательности и заменить нетерминалы на терминалы.При добавлении соответсвующих правил, грамматика приметокончательный вид:
S → GaAFEF → aAF | ε Aa → aAAE → EAGa → aGGE → ZZZ → εBC → CBCB → BCaB → BaBa → aBaC → CaCa → aCB → bC → C
(г) Решение сводится к решению задачи (б) с той лишь разницей,что в нашем случае цепочка ω имеет особый вид ambn. Дляреализации такого вида цепочки потребуются следубщие пра-вила:
S → aCADC → aCA | bEBE → bEB | ε
12
Остальная часть грамматики идентична грамматике из зада-ния (б):
S → aCADC → aCA | bEBE → bEB | εAD → aDBD → bDAa → aAAb → bABa → aBBb → bBD → ε
7. Решите систему уравнений с регулярными коэффициентами
A1 = (01∗ + 1)A1 + A2
A2 = 11 + 1A1 + 00A3
A3 = ε + A1 + A2
Теория.Определение. Уравнения, коэффициенты которых — регулярные выра-жения, будем называть уравнениями с регулярными коффициентами.Замечание. Решение уравнения с регулярными коэффициентамиX = aX + b имеет вид X = a∗b
Решение.Исходя из замечания найдём вид решения первого уравнение иподставим его соответсвенно во второе и третье. ПолучимA1 = (01∗ + 1)∗A2
A2 = 11 + 1(01∗ + 1)∗A2 + 00A3
A3 = (01∗ + 1)∗A2 + A2 + ε
Теперь найдём решение второго уравнения, которое будет яв-но зависеть от A3.A1 = (01∗ + 1)∗A2
A2 = (1(01∗ + 1)∗)∗(00A3 + 11)A3 = ((01∗ + 1)∗ + ε)A2 + ε
Расскроем скобки во втором уравнении и подсавим значениеA2 в третье уравнение.A1 = (01∗ + 1)∗A2
A2 = (1(01∗ + 1)∗)∗00A3 + (1(01∗ + 1)∗)∗11
13
A3 = ((01∗+1)∗+ε)(1(01∗+1)∗)∗00A3+(((01∗+1)∗+ε)(1(01∗+1)∗)∗+ε)
Третье уравнение содержит только одну независимую пере-менную A3, значение которой находится с использованием всётого же замечания.A3 = (((01∗+1)∗+ε)(1(01∗+1)∗)∗00)∗(((01∗+1)∗+ε)(1(01∗+1)∗)∗+ε)A2 = . . .A1 = . . .
8. Пусть L — регулярное множество. Докажите, что LR — регулярноемножество.
Решение.Для начала заметим, что по определнию любое регулярное мно-жество описывается соответсвующим регулярным выражением.Доказательство проведём по индукции.База индукции:
1) L1 = LR1 = ø — регулярное выражение, обозначающее регуляр-
ное (пустое) множество;2) L1 = LR
1 = ε — регулярное выражение, обозначающее регуляр-ное множество ε;
3) L1 = LR1 = a — регулярное выражение, обозначающее регуляр-
ное множество a;Предположение индукции:Если Li — регулярное выражение, то и LR
i также является регу-лярным выражением.Шаг индукции:Рассмотрим выражение Li+1. Из определения регулярного выра-жение следует, что это выражение может быть получено тремяспособами:
1) Li+1 = Li+L1, а значит выражение LRi+1 = (Li+L1)
R = LRi +LR
1
также является регулярным по определению;2) Li+1 = LiL1, тогда выражение LR
i+1 = (LiL1)R = LR
1 LRi также
является регулярным;3) Li+1 = L∗
i , а следовательно выражение LRi+1 = (L∗
i )R = (LR
i )∗ –регулярное, исходя из определения.
Таким образом получаем, что через n шагов индукции мы получимвыражения L = Ln и LR = LR
n , которые оба будут регулярнымии будут описывать два исходных регулярных множества L и LR
соответсвенно.
14
9. Докажите нерегулярность следующих множеств:(a) 0n1n | n > 1. Этот язык, который состоит из всех цепочек,
состоящих из нулей, за которыми следует такое же количествоединиц.
(б) 0n10n | n > 1(в) 0n1m2n | n и m — произвольные целые числа;(г) 0n1m | n 6 m;(д) 0n12n | n > 1.
Теория.Лемма (о разрастании для регулярных множеств). Пусть L – ре-гулярное множество. Существует такая константа p, что если ω ∈ L и|ω| > p, то цепочку ω можно представить в виде xyz, где 0 < |y| < p иxyiz ∈ L для всех i > 0.Для доказательсва воспользуемся отрицанием изложенной леммы и на-глядно покажем её не выполнение.Решение.(a) 1) если y = 0+, т.е. 0 0 . . . 0︸ ︷︷ ︸
y01 . . . 1, то xy0z /∈ L
2) если y = 1+, т.е. 0 . . . 01 1 . . . 1︸ ︷︷ ︸y
1, то xy0z /∈ L
3) если y = 0+1+, т.е. 0 0 . . . 01 . . . 1︸ ︷︷ ︸y
1, то xyyz /∈ L
(б) 1) если y = 0∗10∗, т.е. 0 0 . . . 010 . . . 0︸ ︷︷ ︸y
0, то xyyz /∈ L
2) если y = 0+, т.е. 0 0 . . . 0︸ ︷︷ ︸y
010 . . . 0, то xy0z /∈ L
(в) При m = 0 нерегулятность множества аналогична нерегуляр-ности множества 0n1n | n > 1
(г) 1) если y = 0+1+, т.е. 0 0 . . . 01 . . . 1︸ ︷︷ ︸y
1, то xyyz /∈ L
2) если y = 0+, то xyiz /∈ L, где i > m−n+|y||y|
3) при m = n и y = 1+, т.е. 0 . . . 01 1 . . . 1︸ ︷︷ ︸y
1, то xy0z /∈ L
(д) 1) если y = 0+ | 1+, то xy0z /∈ L2) если y = 0+1+, то xyyz /∈ L
15
10. Постройте детерминированные конечные автоматы с минималь-ным числом состояний для следующих регулярных выражений.(a) (1 | 0)∗0(1 | 0)(б) (1 | 0)∗0(1 | 0)(1 | 0)(в) (1)∗(01)∗1001(1∗0)∗
Теория.Определение. Пусть M = (Q,Σ, δ, q0, F ) — недетерминированный конеч-ный автомат. Назовем автомат M детерминированным, если множествоδ(q, a) содержит не более одного состояния для любых q ∈ Q и a ∈ Σ.Решение.(a) Построим сначала недетерминированный конечный автомат.
Опишем состояния детерминированного автомата и построимего.
0 1(1) = A (2) (1)(2) = A, B (3) (4)(3) = A, B, C (3) (4)(4) = A, C (2) (1)
Теперь проверим данный автомат на минимальность состоя-ний:
≡0 1, 23, 4≡1 1234
Следовательно данный автомат содержит минимальноеколичество состояний, необходимых для описания исходноговыражения.
16
(б) Недетерминированный автомат выглядет следующим образом
Вычислим таблицу состояний и переходов для детерминиро-ванного автомата.
0 1(1) = A (2) (1)(2) = A, B (4) (3)(3) = A, C (5) (6)(4) = A, B, C (7) (8)(5) = A, D (2) (1)(6) = A, B, D (4) (3)(7) = A, B, C,D (7) (8)(8) = A, C,D (6) (5)
В результате получили
Проверим автомат на минимальность:≡0 1, 2, 3, 45, 6, 7, 8≡1 1, 23, 45, 67, 8≡2 12345678
Делаем вывод, что данный автомат содержит минимальноеколичество состояний, необходимых для описания исходноговыражения.
17
(в) Недетерминированный автомат будем строить по частям.Для начала построим автомат для выражений (1)∗ и (01)∗.
Теперь постороим автомат для выражений 1001 и 1∗0.
Соединяем части в выражение (1)∗(01)∗1001 по следующемузамечанию.Замечание.Из каждого конечного состояния проводим стрелки,которые идут из каждого начального.
Теперь создадим последнюю часть данного выражения –(1∗0)∗.
18
Исспользуя вышеупомянутое замечание постоим недетерми-нированный автомат для всего выражения.
Вычислим таблицу состояний и переходов для детерминиро-ванного автомата.
0 1(1) = A (2) (3)(2) = C − (6)(3) = A, E (4) (3)(4) = C, F (5) (6)(5) = G − (7)(6) = B (2) (8)(7) = H (9) (10)(8) = E (11) −(9) = J (9) (10)(10) = I (9) (10)(11) = F (5) −
19
По таблице строим детерминированный автомат.
Проведём оценку автомата на свойство минимальностисостояний:
≡0 1, 2, 3, 4, 5, 6, 8, 10, 11, 127, 9≡1 1, 2, 3, 4, 6, 8, 11, 1257910≡2 4, 111, 2, 3, 6, 8, 1257910≡3 4, 113, 81, 2, 6, 1257910≡4 4, 11381, 62, 1257910≡4 411381621257910
Получили, что данный автомат удовлетворяет свойствуминимальности.
20
11. Постройте МП-автоматы, допускающие следующие языков:(a) anbnan | n > 1;(б) ωωR | ω ∈ a, b∗;(в) ambnambn | m, n > 1(г) ωω | ω ∈ a, b∗Теория.
Лемма (о разрастании для КС-языков). Пусть L — КС-язык. То-гда существует такая константа k, что если |z| > k и z ∈ L, то цепоч-ку z можно представить в виде z = uvwxy, где vx 6= ε, |vwx| 6 k иuviwxiy ∈ L для всех i > 0.Постоить МП-автоматы для данных языков, кроме (б), невозможно.Для доказательсва данного факта воспользуемся отрицанием изложен-ной леммы и наглядно покажем её не выполнение.Решение.(a) 1) если v = a+ и x = a+, т.е. a a . . . a︸ ︷︷ ︸
vab . . . ba a . . . a︸ ︷︷ ︸
xa, то
uv0wx0y /∈ L2) если v = b+ и x = b+, т.е. a . . . ab b . . . b︸ ︷︷ ︸
vb b . . . b︸ ︷︷ ︸
xba . . . a, то
uv0wx0y /∈ L3) если v = a+b+ или x = b+a+, т.е.
a . . . a a . . . ab . . . b︸ ︷︷ ︸v
b b . . . ba . . . a︸ ︷︷ ︸x
a, то uv2wx2y /∈ L
(б) Язык является КС, поэтому предъявим МП-автомат, допус-кающий все цепочки данного языка.P = (q0, q1, q2, a, b, Z, a, b, δ, q0, Z, q2), где
δ(q0, ε, Z) = (q2, ε)δ(q0, a, Z) = (q0, aZ)δ(q0, b, Z) = (q0, bZ)δ(q0, a, b) = (q0, ab)δ(q0, a, a) = (q0, aa), (q1, ε)δ(q0, b, b) = (q0, bb), (q1, ε)δ(q0, b, a) = (q0, ba)δ(q1, b, b) = (q1, ε)δ(q1, a, a) = (q1, ε)δ(q1, ε, Z) = (q2, ε)
(в)(г)12. Наидите грамматику порождающую L(P ), где
21
P = (q0, q1, q2, a, b, Z0, A, δ, q0, Z0, q2)и δ задается равенствами:
δ(q0, a, Z0) = (q1, AZ0)δ(q0, a, A) = (q1, AA)δ(q1, a, A) = (q1, AA)δ(q1, a, A) = (q1, A)δ(q2, a, A) = (q1, ε)
13. Рассмотрим два следующих языка:L1 = anb2ncm | n, m > 0L2 = anbmc2m | n, m > 0
(a) покажите, что каждый из них являеся контекстно-свободным,построив для них КС-грамматики;
(б) укажите, является ли L1 ∩ L2 КС-языком. Ответ обоснуйте.
Теория.Грамматика G называется контекстно-свободной, если каждое правилоиз P имеет вид A → α, где A ∈ N,α ∈ (N ∪ Σ)∗.Лемма (о разрастании для КС-языков). Пусть L — КС-язык. Тогдасуществует такая константа k, что если |z| > k и z ∈ L, то цепочку z
можно представить в виде z = uvwxy, где vx 6= ε, |vwx| 6 k и uviwxiy ∈L для всех i > 0.Решение.(a) Построим грамматику для языка L1.
S → XYX → aXbb | εY → cY | ε
Для L2 грамматика будет выглядеть следующим образом.S → XYX → aX | εY → bY cc | ε
(б) L1 ∩ L2 = anb2nc4n | n > 0Данный язык не является КС, для доказательства воспользу-емся леммой о разрастании.
1) если v = a+, v = b+ или v = c+, то для uv0wx0y наруша-ется соотношение степеней и uv0wx0y /∈ L
22
2) если v = a+b+, v = a+b2na+ или v = b+a+, то дляuv2wx2y нарушется порядок следования символов иuv2wx2y /∈ L
14. Найдте грамматику, не содержащую бесполезных символов иэквивалентную следующей грамматике:
S → AB | CAA → aB → BC | ABC → aB | b
Терия.Алгоритм “Устранение бесполезных символов”.
1. Применив к G алгоритм “Непуст ли язык?”, получить Ne. Поло-жить G1 = (N ∩Ne,Σ, P1, S), где P1 состоит из правил множестваP , содержащих только символы из Ne ∪ Σ.
2. Применив к G1 алгоритм ”Устранение недостижимых символов”,получить G′ = (N ′,Σ′, P ′, S′).
(1) Алгоритм “Непуст ли язык L(G)?”1. N0 = ø и i = 1.2. Ni = A | A → α ∈ P и α ∈ (Ni−1 ∪ Σ)∗ ∪Ni−1.3. Если Ni 6= Ni−1, то i = i + 1 и перейти к шагу 2, иначе
Ne = Ni.4. Если S ∈ Ne : “ДА” иначе “НЕТ” .
(2) Алгоритм “Устранение недостижимых символов”1. V0 = S и i = 1.2. Vi = X | в P есть A → αXβ и A ∈ Vi−1 ∪ Vi−1.3. Если Vi 6= Vi−1, то i = i + 1 и перейти к шагу 2, в про-
тивном случае пусть N ′ = Vi ∩ N,Σ = Vi ∩ Σ, P ′ состоитиз множества правил P , содержащих только символы изVi, G
′ = (N ′,Σ′, P ′, S).
Решение.Выполняя алгоритм “Непуст ли язык?” получаем:
23
N0 = øN1 = A, CN2 = S, A,CN3 = N2 = S, A,C = Ne
S → CAA → aB → b
Теперь выполним алгорит “Устранение недостижимых символов”:
V0 = SV1 = C, A, SV2 = b, a, C,A, SV3 = V2
В итоге грамматика примет вид:S → CAA → aB → b
15. Рассмотрите следующую грамматику:
S → ASB | εA → aAS | aB → SbS | A | bb
(a) есть ли в грамматике бесполезные символы? Если да, то уда-лите их;
(б) удалите ε-правила;(в) удалите цепные правила;
(г) приведите грамматику к нормальной форме Хомского.
Теория.Определение. Назовем КС-грамматику G = (N,Σ, P, S) грамматикойбез ε-правил, если либо
1) P не содержит ε-правил, либо2) есть точно одно ε-правило S → ε и S не встречается в правых
частях правил из P .
Алгоритм “Преобразование в грамматику без ε-правил”
24
1) Необходимо построить Nε = A | A ∈ N и A ⇒+G ε.
(a) N0 = ø и i = 1.(b) Ni = A | A → ε или A → α, α ∈ N∗
i−1 ∪Ni−1.(c) Если Ni 6= Ni−1, то i = i + 1 и перейти к шагу (b), иначе
Nε = Ni
2) Построить P ′ так:(a) Если A → α0B1α1B2 . . . αk−1Bkαk пренадлежит P, k > 0 и
Bi ∈ Nε для 1 6 i 6 k, но ни один символ в цепочках αj(0 6j 6 k) не пренадлежит Nε, то включить в P ′ все правилавида
A → α0X1α1X2 . . . αk−1Xkαk,где Xi – либо Bi, либо ε, но не включать правило A → ε.
(б) Если S ∈ Nε, включить в P ′ правилаS′ → ε | S,
где S′ – новый символ, положить N ′ = N∪S′. В противномслучае положить N ′ = N и S′ = S.
3) Положить G′ = (N ′,Σ′, P ′, S′).
Определение. Цепные правила — правила вида A → B.Алгоритм “Устранение цепных правил”
1) Для каждого A ∈ N построить NA = B | A ⇒∗ B следующимобразом:
(a) N0 = A и i = 1.(b) Ni = C | B → C пренадлежит P и B ∈ Ni−1 ∪Ni−1.(c) Если Ni 6= Ni−1, то i = i + 1 и повторить к шагу (b). В
противном случе положить NA = Ni
2) Построить P ′ так: если B → α пренадлежит P и не является цеп-ным правилом, включить в P ′ правило A → α для всех таких A,что Bi ∈ NA.
3) Положить G′ = (N ′,Σ′, P ′, S).
Определение. КС-грамматика G = (N,Σ, P, S) называется граммати-кой в нормальной форме Хомского, если каждое правило из P имеетодин из следующих видов:
– A → BC, где A,B и C принадлежат N ,– A → a, где a ∈ Σ,– A → ε, если ε ∈ L(G), причем S не встречается в правых частях
правил.Алгоритм “Преобразование к нормльной форме Хомского.”
1) Включить в P ′ каждое правило из P вида A → a.2) Включить в P ′ каждое правило из P вида A → BC.3) Включить в P ′ правило S → ε, если оно было в P .
25
4) Для каждого правила из P вида A → X1 . . . Xk, где k > 2, включитьв P ′ правила
A → X ′1[X2 . . . Xk]
[X2 . . . Xk] → X ′2[X3 . . . Xk]
.
.
.[Xk−2Xk−1Xk] → X ′
k−2[Xk−1Xk][Xk−1Xk] → X ′
k−1X′k]
где X ′i = Xi, если Xi ∈ N ; X ′
i — новый нетерминал, если Xi ∈ Σ;[Xi . . . Xk] — новый нетерминал.
5) Для каждого правила из P вида A → X1X2, где хотябы один изсимволов X1 и X2 принадлежит Σ, включить в P ′ правило A →X ′
1X′2.
6) Для каждого нетерминала вида a′, введённого на шагах (4) и (5),включить в P ′ правило a′ → a. Наконец, путь N ′ — это N вместесо всеми новыми нетерминалами, введёнными при построении P ′.
Решение.(a) Аналогично предыдущему примеру выполним алгоритм
“Устранение бесполезных символов”.(1)
N0 = øN1 = S, A,BN2 = N1 = S, A,B = Ne
В результате грамматика примет вид:S → ASB | εA → aAS | aB → SbS | A | bb
(2)V0 = SV1 = S, A,BV2 = V1
В результате выполнения алгоритма грамматика приметвид:
S → ASB | εA → aAS | aB → SbS | A | bb
26
(б) Выполняя алгоритм “Преобразование в грамматику безε-правил” получаем:
N0 = øN1 = SN2 = N1 = S = Nε
грамматика примет вид:S ′ → S | εS → ASB | ABA → aAS | aA | aB → SbS | bS | Sb | b | A | bb
(в) Выполним алгорим “Устранение цепных правил”:
S ′:N0 = S ′N1 = S, S ′N2 = N1 = S, S ′ = NS′
S: N0 = SN1 = N0 = S = NS
A: N0 = AN1 = N2 = A = NA
B:N0 = BN1 = A, BN2 = N1 = A, B = NB
В итоге грамматика примет вид:S ′ → ASB | AB | εS → ASB | ABA → aAS | aA | aB → SbS | bS | Sb | b | aAS | aA | a | bb
(г) Используя алгоритм “Преобразование к нормльной формеХомского.” грамматика изменится так:
27
S ′ → A〈SB〉 | AB | εS → A〈SB〉 | ABA → a′〈AS〉 | a′A | aB → S〈bS〉 | b′S | Sb′ | b | a′〈AS〉 | a′A | a | b′b′〈SB〉 → SB〈AB〉 → AB〈AS〉 → AS〈bS〉 → b′S〈Sb〉 → Sb′
a′ → ab′ → b
16. Устраните левую рекурсию в следующей грамматике:
S → AA | 0A → SS | 1
Теория. Определение. Нетерминал A КС-грамматики G =(N,Σ, P, S) называется рекурсивным, если A ⇒+ αAβ для некоторыхα и β. Если α = ε, то A называется леворекурсивным. Аналогично, еслиβ = ε, то A называется праворекурсивным. Определение. Грамматика,имеющая хотя бы один леворекурсивный нетерминал, называется лево-рекурсивной. Аналогично, грамматика, имеющая хотя бы один право-рекурсивный нетерминал, называтеся праворекурсивной. Алгоритм.”Устранение левой рекурсии”.
1. Пусть N = A1, . . . , An. Преобразуем G таким образом, чтобы вправиле Ai → α цепочка α начиналась либо с терминала, с такогоAj , что j > i. С этой целью положим i = 1
2. Пусть множество Ai-правил — это Ai → Aiα1 | . . . | Aiαm | β1 |. . . | βp, где ни одна из цепочек βj не начинается с Ak, если k 6 i.Заменим Ai-правила правилами:
A → β1 | . . . | βp | β1A′i | . . . | βpA
′i
A′i → α1 | . . . | αm | α1A
′i | . . . | αmA′
i
где A′i — новый нетерминал. Правые части всех Ai-правил начина-
ются теперь с терминала или с Ak для некоторого k > j.3. Если i = n, полученую грамматику G′ считать результатом и оста-
новиться. В противном случае положить i = i + 1 и j = 1.4. Заменить каждое правило вида Ai → Ajα правилами Ai → β1α |
. . . | βmα, где Aj → β1 | βm — все Aj-правила. Так как праваячасть каждого Aj-правила начинается уже с терминала или с Ak
для k > j, то и правая часть каждого Ai-правила будет теперьобладать этим свойством.
5. Если j = i − 1, нужно перейти к шагу (2). В противном случаеположить j = j + 1 и перейти к шагу (4).
28
Решение. Составим множество N таким образом:N = S, A
Выполняя описанный алгоритм сначала получим:S → AA | 0A → AAS | 0S | 1
И итоге грамматика примет вид:S → AA | 0A → 0S | 1 | 0SA′ | 1A′
A′ → AS | ASA′
18. Постройте МП-автоматы, допускающие следующие языки. Можноиспользовать как допуск по заключительному состоянию, так и попустому магазину.(a) 0n1n | n > 1;(б) множество всех цепочек из 0 и 1, в префиксах которых коли-
чество символов 1 не больше количества символов 0;(в) множество всех цепочек из 0 и 1 с одинаковыми количествами
символов 0 и 1.Решение.(a) Построим МПА, определяющий язык 0n1n | n > 1. Пусть
P = (q0, q1, q2, 0, 1, Z, 0, δ, q0, Z, q0),δ(q0, 0, Z) = (q1, 0Z),δ(q1, 0, 0) = (q1, 00),δ(q1, 1, 0) = (q2, ε),δ(q2, 1, 0) = (q2, ε),δ(q2, ε, Z) = (q0, ε).
Для входной цепочки 0011 автомат P проделает такую после-довательность тактов:
(q0, 0011, Z) ` (q1, 011, 0Z),` (q1, 11, 00Z),` (q2, 1, 0Z),` (q2, ε, Z),` (q0, ε, ε).
Вообще можно показать, что(q0, 0, Z) ` (q1, ε, 0Z),
(q1, 0i, 0Z) `i (q1, ε, 0
i+1Z),(q1, 1, 0
i+1Z) ` (q2, ε, 0iZ),
(q2, 1i, 0iZ) `i (q2, ε, Z)
(q2, ε, Z) ` (q0, ε, ε)
29
Объединяя всё это, получаем для n > 1(q0, 0
n1n, Z) `2n+1 (q0, ε, ε),(q0, ε, Z) `1 (q0, ε, ε),