Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Формальные языки и грамматики. Учебное пособие для студентов факультета компьютерных наук и информационных технологий.pdf
Скачиваний:
0
Добавлен:
09.08.2026
Размер:
457 Кб
Скачать

a) идентификаторы. Буквы идентификатора невозможно разделить путем присоединения оператора;

б) выражения в скобках, независимо от того, что находится между ними;

2)слагаемое, или терм, – это выражение, которое не может быть разорвано оператором +. В нашем примере терм представляет собой произведение одного или нескольких сомножителей;

3)выражение будет обозначать любое возможное выражение.

E

E + T

T T F

F F I

I I A

AA

Рис. 4.3. Дерево вывода для цепочки a + a a и грамматики (4.11)

Следующая грамматика представляет собой тот же язык, что и грамматика (4.8), но является однозначной:

E → T | E + T,

T → F | T F,

(4.11)

F → I | (E ),

I → a | b | Ia | Ib | I0 | I1.

Так, например, для цепочки a + a a в этой грамматике существует только одно дерево разбора, показанное на рис. 4.3.

Определение 79 (Существенно неоднозначный язык). КС-язык L называется существенно неоднозначным, если все его грамматики неоднозначны. Если хотя бы одна грамматика языка L является однозначной, то L является однозначным языком.

Теорема 24 (Об однозначности языков типа 3). Все языки типа 3 однозначны.

Доказательство. Пусть L – язык типа 3 над терминальным алфавитом Σ. По теореме 14 L = L(M), для некоторого КДА M = (Q,Σ,P,q0,F ). Отсюда язык L порождается грамматикой G = (Q,Σ,P1,q0), где

P1 = {q → ar | q,r Q, a Σ, qa → r P} {q → ε | q F }.

Грамматика G, очевидно, является однозначной.

4.5. Преобразования КС-грамматик

Определение 80 (ε-правило). В грамматике типа 2 ε-правилом называют любое правило вида A → ε, где A – нетерминальный символ.

Определение 81 (A-правило). В грамматике типа 2 A-правилом называют любое правило вида A → α, где A – нетерминальный символ, α – произвольная цепочка.

70

Определение 82 (Цепное правило). В грамматике типа 2 цепным правилом называют любое правило вида A → B, где A и B – нетерминальные символы.

Определение 83 (Грамматика без ε-правил). Грамматику типа 2 G = (N,Σ, P,S) называют грамматикой без ε-правил, если в ней отсутствуют ε-правила или присутствует правило S → ε, при условии что S не встречается в правых частях правил.

Теорема 25 (О грамматиках без ε-правил). Для любого языка типа 2 найдется его определяющая грамматика без ε-правил.

Доказательство. Пусть L – язык типа 2, а G = (N,Σ,P,S) – КС-грамматика, его определяющая.

Найдем множество

 

U = {A N | A ε}.

 

(4.12)

Для этого определим

 

 

U1 = {A | A → ε P},

 

 

U

1 = U {A | A → α P, α U },

i > 1.

i+

i

i

 

Так как Ui представляют собой монотонно увеличивающиеся подмножества множества N, найдется число k такое, что Uk = Uk+V , V = 1,2,.... Положим, U = Uk.

Таким образом, ε L(G) тогда и только тогда, когда S U .

Построим грамматику G= (N,Σ,P,S), в которой продукция A → α принадлежит множеству Pтогда и только тогда, когда α 6= ε и найдется продукция A → β P такая, что α получается из β удалением 0 или более символов из U .

Справедливо, что L(G) = L(G)−{ε}. Действительно, включение L(G)L(G) − {ε} очевидно из (4.12). Обратное включение устанавливается при рассмотрении грамматики

G1 = (N,Σ,P P,S).

Ясно, что L(G) L(G1). Если w L(G) и w =6 ε, то w L(G), так как все применения продукций A → ε могут быть заменены некоторыми применениями продукций из P.

Если ε L(G), построим грамматику G′′:

G′′ = (N {S},Σ,P{S→ ε,S→ S},S).

По построению L(G′′) = L(G) {ε}.

Как грамматика G, так и грамматика G′′ – грамматики без ε-правил.

71

Следствие 25.1. Любой язык типа 2 является языком типа 1.

Пример 47. Рассмотрим грамматику

S → AB, A → aAA | ε, B → bBB | ε.

Применим к ней метод, предложенный в доказательстве теоремы 25. Сначала определим, что U = {A,B,S}.

Правило S → AB влечет за собой включение в новое множество правил Pправил S → AB | A | B. Из-за правила A → aAA включаем в Pправила A → aAA | aA | a. Процесс повторяем для всех правил исходной грамматики, не являющихся ε-правилами. В итоге получим множество Pв следующем

виде:

S → AB | A | B,

A → aAA | aA | a,

B → bBB | bB | b.

Так как S U , то включаем новый начальный нетерминал Sв множество нетерминалов и добавляем два правила S→ S | ε.

Окончательная грамматика

S→ S | ε,

S → AB | A | B,

A → aAA | aA | a,

B → bBB | bB | b.

Теорема 26 (О грамматиках без цепных правил). Для любого языка типа 2 найдется грамматика без цепных правил, его определяющая.

Доказательство. Пусть L – язык типа 2, а G = (N,Σ,P,S) – грамматика, его определяющая. Согласно теореме 25 можно предположить, что G – грамматика без ε-правил.

Для каждого X N найдем

U (X ) = {B N | B X }.

(4.13)

Для этого определим

 

U1(X ) = {X },

 

Ui+1(X ) = Ui {A | A → B P, B Ui(X ) },

i > 1.

Так как Ui(X ) представляют собой монотонно увеличивающиеся подмножества множества N, найдется число k такое, что Uk = Uk+V , V = 1,2,....

Положим, U (X ) = Uk(X ).

72

Построим грамматику G= (N,Σ,P,S), в которой продукция A → β принадлежит множеству Pтогда и только тогда, когда это не цепное правило и найдется нетерминал B такой, что существует правило B → β P и A U (B).

Покажем, что L(G) L(G). Действительно, рассмотрим цепочку wL(G). Построим дерево вывода для этой цепочки по грамматике G. Заметим, что по принципу построения грамматики Gвсе нецепные правила грамматики G включаются в P. Применение цепного правила A → B при выводе цепочки w приведет к появлению в дереве вывода узла с меткой A, имеющего единственного потомка с меткой B. Наличие в дереве вывода цепи A0,A1,...,Ak для k > 1 соответствовует последовательности применений цепных правил A0 → A1, . . . , Ak−1 → Ak. Пусть A0 – начальный, а Ak – конечный узел такой цепи, т. е. узел A0 появился не в результате применения цепного правила и к нетерминалу Ak применяется не цепное правило. Допустим, что к нетерминалу Ak применяется правило Ak → α, α (N + Σ) . Согласно 4.13 A0 U (Ak). Принимая это во внимание и в связи с тем, что Ak → α P, можем сделать вывод, что правило A0 → α должно содержаться в P. Заменим поддерево A0-···-Ak-α на A0-α. Такая замена будет соответствовать применению правила грамматики G. Крона дерева от такой замены не изменится. Повторим этот процесс для каждой цепи метокнетерминалов в нашем дереве. Получим дерево, построенное по правилам грамматики Gс той же кроной. Так как кроной дерева является цепочка w, делаем вывод, что любое слово языка L(G) содержится в L(G).

В обратную сторону. Рассмотрим вывод цепочки w L(G). Пусть шаг вывода αi Gαi+1 происходит в результате применения правила A → βP. Но наличие такого правила в Pпредполагает, что A U (B) для некоторого нетерминального символа B (возможно, B = A) и в грамматике G присутствует правило B → β. Факт A U (B) означает, что A G B. Следовательно, αi G αi+1. Так как шаг вывода был выбран произвольно, S G w.

В силу произвольного выбора цепочки w L(G) L(G). Таким образом, L(G) = L(G).

Определение 84 (Нормальная форма Хомского). КС-грамматика G = (N,Σ,

P,S) называется грамматикой в нормальной форме Хомского, если в ней нет ε-правил и любое правило, отличное от S → ε, имеет вид

1)A → BC, где B,C N,

2)A → a, где a Σ.

Теорема 27 (О грамматиках в нормальной форме Хомского). Для любого языка типа 2 найдется грамматика в нормальной форме Хомского.

Доказательство. Пусть L – язык типа 2, а G = (N,Σ,P,S) – грамматика, его определяющая. Согласно теореме 25 и теореме 26 можно, не теряя

73

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]