Языки и трансляции. Мартыненко Б.К. - 23 стр.

UptoLike

Составители: 

22
§ 2.5. Рекурсивность
контекстно-зависимых грамматик
Напомним, что грамматика G =(V
N
, V
T
, P, S) — рекурсивна, если существует
алгоритм, который определяет (за конечное время), порождается ли любая
данная цепочка
*
T
x
V данной грамматикой G.
Пусть
G = (V
N
, V
T
, P, S) — контекстно-зависимая грамматика. Проверить,
порождается пустое предложение данной грамматикой или нет, просто.
Достаточно посмотреть, имеется ли в ней правило
S →ε, поскольку ε∈L(G)
тогда и только тогда, когда
S →εP. Если ε∈L(G), то мы можем образовать
новую грамматику: G
1
=(V
N
, V
T
, P
1
, S), отличающуюся от исходной лишь тем, что
в ней не будет правила S →ε, т.е. P
1
= P \{S →ε}. Согласно теореме 2.1
грамматика
G
1
тоже контекстно-зависима, и L(G
1
)=L(G)\{ε}. Следовательно,
в любом выводе длина последовательных сентенциальных форм разве лишь
возрастает (т.е. не убывает).
Пусть
объединённый словарь V грамматики G
1
имеет k символов.
Предположим, что
S
x (x ≠ε). Пусть этот вывод имеет вид:
S
α
1
α
2
...
α
m
= x, причём
1
|
2
| ...
m
|.
Предположим, что сентенциальные формы
α
i
, α
i +1
, ..., α
i + j
все одной и той
же длины, скажем,
p. Предположим также, что j kp. Тогда среди этих
сентенциальных форм, по крайней мере, какие-то две одинаковы,
так как число
всевозможных различных непустых цепочек длиной p, составленных из
символов алфавита
V, в котором k символов, равно kp. В рассматриваемой же
последовательности мы имеем j + 1 цепочек, где j kp.
Пусть,
например, α
q
= α
r
, где q < r. Тогда
S α
1
α
2
... α
q
α
r +1
... α
m
= x
является более коротким выводом цепочки
x в грамматике G
1
, чем перво-
начальный.
Интуитивно ясно, что если существует какой-нибудь вывод терминальной
цепочки, то существует ине слишком длинныйеё вывод.
В следующей теореме описывается алгоритм распознавания контекстно-
зависимого языка, в котором существенно используется это соображение.
Теорема 2.2. Если грамматика G=(V
N
, V
T
, P, S)контекстно-зависима,
то онарекурсивна.
Доказательство. В предыдущих параграфах было показано, что суще-
ствует простой способ узнать, действительно ли
ε∈L(G), и если это так, то,
исключив из грамматики правило
S →ε, получим грамматику, которая
порождает тот же самый язык, но без пустого предложения. Любое же
непустое предложение языка выводимо без использования этого правила.
Поэтому, предполагая, что
P не содержит правила S →ε, рассмотрим произ-
вольную цепочку
+
T
.
x
V Наша задача найти алгоритм, разрешающий вопрос:
x L(G)?”
Пусть
|x | = n (n > 0). Определим множество T
m
следующим образом:
T
m
= {α | S α, i m,
+
,Vα∈ | α | n}.
1
G
1
*
G
i
G
1
G
1
G
1
G
1
G
1
G
1
G
1
G
1
G
1
G
1
G