formal_language_theory / lectures / unit_4
.pdfО приведённых cfg
|
|
|
|
|
||
|
Мы можем |
эффективно |
построить |
|||
множество VN2 всех нетерминалов A, |
таких, |
|||||
что будет |
существовать вывод |
S 1A 2, |
||||
|
|
|
|
* |
|
|
следующим образом. |
G1 |
|
|
|||
|
|
|
||||
|
Для начала поместим S в искомое |
|||||
множество. |
Затем |
последовательно |
|
будем |
добавлять к этому множеству любой нетерминал, который появляется в правой части любого правила из P1, определяющего нетерминал, уже имеющийся в этом множестве. Процесс завершается, когда никакие новые элементы не могут быть добавлены к упомянутому множеству.
21
О приведённых cfg
2 |
, VT, P2, S), где P2 |
— |
Положим G2 = (VN |
множество правил, оставшихся после
исключения |
всех правил из |
P1, которые |
|
используют |
символы из VN \ |
2 |
слева или |
VN |
справа. G2 — требуемая грамматика.
Покажем, что L(G1) = L(G2) и G2 удовлетворяет условию теоремы.
22
Оприведённых cfg
I.L(G1) L(G2).
Пусть x L(G1), т. е. S * x. G1
Очевидно, что все нетерминалы, встречающиеся в сентенциальных формах этого
вывода достижимы, т. е. принадлежат алфавиту VN2 , и соответственно в нём участвуют только правила из P2.
Следовательно, S * x и x L(G2).
G2
23
Оприведённых cfg
II.L(G2) L(G1).
Это очевидно, так как P2 P1.
Из I и II следует, что L(G1) = L(G2).
Если A V |
2 |
(т. е. |
A достижим), |
то |
|||||||
N |
|||||||||||
существует |
|
вида S |
1A 2, |
и |
|||||||
вывод |
|||||||||||
|
|
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
|
|
|
|
G |
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
поскольку все нетерминалы продуктивны, |
|||||||||||
то S |
|
1A 2 |
x1Ax3 |
x1x2x3, |
|
|
|||||
* |
|
|
|
||||||||
|
|
|
|
|
* |
* |
|
|
|||
|
G |
2 |
|
G |
2 |
G |
2 |
|
|
||
|
|
|
|
|
|||||||
|
|
|
, x , x V |
|
|
|
|||||
где x |
|
*. |
|
|
|
|
|||||
|
1 |
|
2 3 |
T |
|
|
|
|
КС-грамматика G, о которой идёт речь в теореме, есть G2.
Что и требовалось доказать.
24
О приведённых cfg
Определение 4.2. Контекстно-свободные грамматики, удовлетворяющие условию теоремы 4.3, принято называть
приведёнными.
25
Левосторонний вывод в КС-грамматике
Определение 4.3. Вывод в КС-грамматике назовем левосторонним, если на каждом его шаге производится замена крайнего левого вхождения нетерминала.
Формально: пусть G = (VN, VT, P, S) — КС-
грамматика. Вывод в грамматике G вида
S 1 2 ... n
— левосторонний, если для i = 1, 2,..., n – 1 |
||||||
имеет место i = xi Ai i , i + 1 = xi i i , где |
||||||
|
|
V |
* |
|
|
*. |
Ai i |
P, xi |
T , Ai |
|
VN , |
i , i V |
26
Левосторонний вывод в КС-грамматике
Для обозначения одного шага левосто-
роннего вывода будем
. , а нескольких шагов lm
использовать значок
значок * .
lm
Лемма 4.1 о левостороннем выводе.
Пусть G = (VN, VT, P, S) — контекстносвободная грамматика.
|
|
|
Если S |
* |
x, |
G |
левосторонний
где x V |
|
|
|
, |
|
T |
|
|
вывод |
|
S |
грамматике.
то существует и
* x в той же
lm
27
Левосторонний вывод в КС-грамматике
Доказательство. Индукцией по длине вывода l докажем более общее утверждение: если для любого нетерминала A VN
* |
|
существует вывод A x, то существует и |
|
G |
* |
левосторонний вывод A x.
Утверждение леммы
lm будет
следовать как
частный случай при S = A. База. Пусть l = 1.
Для одношагового вывода утверждение выполняется тривиальным образом.
28
Левосторонний вывод в КС-грамматике
Индукционная гипотеза. Предположим,
что утверждение справедливо для любых выводов длиной l n (n 1).
Индукционный переход. Докажем, что оно справедливо и для l = n + 1.
n |
|
Пусть A x — вывод длиной n + 1, и |
|
G |
|
пусть = B1B2 ... Bm , а x = x1x2 …xm , |
|
|
, 1 i m. |
где Bi V *, xi V T |
29
Левосторонний вывод в КС-грамматике
т. е. вывод имеет вид
|
n |
|
A B1B2 ... Bm x1x2 ... xm, |
||
li |
G |
|
li n, 1 i m. |
||
причём Bi xi , |
||
G |
|
|
Заметим, что |
некоторые Bi могут быть |
терминалами, и в этом случае Bi = xi и вывод не занимает никаких шагов: Bi * xi.
lm
Если же Bi VN, то согласно индукцион-
ному предположению Bi * xi.
lm
30