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

Глава 2 Грамматики

2.1. Формальное определение грамматики

Определение 31 (Порождающая грамматика). Порождающей грамматикой

называют четверку G = (N,Σ,P,S), где:

1)N – алфавит нетерминальных символов;

2)Σ – алфавит терминальных символов;

3)P – конечное множество правил

P(N + Σ) N(N + Σ) × (N + Σ) ,

т.е. каждый элемент множества P – пара цепочек (α,β), где α – произвольная цепочка из терминальных и нетерминальных символов, содержащая в себе хотя бы один нетерминальный символ, а β – произвольная цепочка из терминальных и нетерминальных символов.

Пару (α,β) обычно принято записывать в виде α → β;

4)S – нетерминальный символ из N, начальный символ грамматики.

В последнем определении терминалы (элементы множества терминаль-

ных символов) представляют собой символы, из которых строятся цепочки языка. В свою очередь, нетерминалы (элементы множества нетерминальных символов) играют роль переменных в грамматике. Начальный символ грамматики задает язык, определяемый грамматикой. Остальные нетерминалы играют роль вспомогательных переменных.

Порождающую грамматику можно сопоставить с системой текстовых замен RW = (N Σ,P). Поэтому можно определить отношения непосредственной выводимости и выводимости по грамматике как отношения по системе текстовых замен. Тогда язык, определенный порождающей грамматикой G, задается как

L(G) = Lg(RW,{S}) ∩ Σ .

Но можно провести независимое определение языка, порожденного грамматикой.

Определение 32 (Язык, порожденный грамматикой). Языком L(G), порожденным (определенным) грамматикой G = (N,Σ,P,S), называют множество

13

всех терминальных цепочек (цепочек, состоящих только из терминальных символов), выводимых из начального символа грамматики:

L(G) = {γ Σ | S G γ}.

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

Пример 18. Рассмотрим грамматику G = (N,Σ,P,S), где N = {S}, Σ = {0,1},

P = {S → 0S1, S → 01}.

В этой грамматике всего лишь два правила и один нетерминальный символ.

Цепочка 01 выводится из S, а следовательно, она принадлежит языку

L(G).

Имеет место S 0S1 00S11 000111. Следовательно, S 000111, а значит, 000111 также принадлежит языку L(G).

Можно показать что язык L(G) состоит из всех непустых цепочек, где последовательность единиц стоит за последовательностью из такого же ко-

личества нулей:

L(G) = {0k1k | k > 0}.

Пример 19. Рассмотрим грамматику G = (N,Σ,P,A), где N = {A,B,C}, Σ = = {a,b,c}, множество P состоит из правил:

A → aABC,

A → abC, CB → BC,

bB → bb,

bC → bc, cC → cc.

Язык L(G) содержит цепочки вида anbncn для каждого n > 1, так как мы можем использовать первое правило n − 1 раз, чтобы получить Aan−1A(BC)n−1. Затем мы используем второе правило, чтобы получить A anbC(BC)n−1. Третье правило дает нам возможность расположить B и C так, чтобы все B предшествовали всем C. Таким образом A anbBn−1Cn. Затем, используя четвертое правило n − 1 раз, получаем A anbnCn. Применим один раз пятое правило, получая A anbncCn−1. Наконец, применив n − 1 раз шестое правило, окончательно получаем A anbncn. Легко показать, что в общем случае возможен только такой порядок применения

правил, т. е.

L(G) = {anbncn | n > 1}.

Пример 20. Рассмотрим грамматику G = (N,Σ,P,S), где N = {S,A,B}, Σ = = {a,b}, а P задается правилами

S → aB, S → bA, A → a, A → aS, A → bAA,

B → b, B → bS, B → aBB.

Можно показать, что эта грамматика определяет язык, состоящий из цепочек, в которых одинаковое количество символов a и b.

14

Замечание 1. Часто для краткости правила грамматики, имеющие одинаковую левую часть, будем объединять при записи в «одно» правило, у которого левая часть – левая часть исходных правил, а в правой части все правые части исходных правил, разделенные символом «|». Таким образом, грамматика из примера 20 запишется следующим образом:

S → aB | bA,

A → a | aS | bAA,

B → b | bS | aBB.

Пример 21. Рассмотрим грамматику G = (N,Σ,P,S), где N = {S,A,B, C,D}, Σ = {a,b}, а P задается правилами

S → CD,

C → aCA,

C → bCB,

C → ε, D → ε, AD → aD,

Aa → aA,

Ab → bA,

BD → bD,

Ba → aB, Bb → bB.

Можно показать, что эта грамматика определяет язык

L(G) = {ww | w {a,b} }.

Пример 22. Рассмотрим грамматику G = (N,Σ,P,S), где N = {S}, Σ = {a,b}, P = {S → aS,S → bS,S → a,S → b}. Эта грамматика определяет язык, состоящий из всех непустых цепочек над алфавитом {a,b}, т. е. L(G) = {a,b}+.

Определение 34 (Аналитическая грамматика). Аналитической (распознающей) грамматикой называют четверку G = (N,Σ,P,S), где:

1)N – алфавит нетерминальных символов;

2)Σ – алфавит терминальных символов;

3)P – конечное множество продукций

P(N + Σ) × (N + Σ) N(N + Σ) ;

4)S – нетерминальный символ из N, заключительный (целевой, финальный, завершающий) символ грамматики.

Аналитическая грамматика G соответствует системе текстовых замен

RW = (N Σ,P) с языком

L(G) = La(RW,{S}) ∩ Σ .

Можно определить язык, допускаемый аналитической грамматикой, следующим образом.

15

Определение 35 (Язык, допускаемый грамматикой). Языком L(G), определенным (допускаемым) аналитической грамматикой G = (N,Σ,P,S), называют множество всех терминальных цепочек (цепочек, состоящих только из терминальных символов), из которых можно вывести заключительный символ грамматики:

L(G) = {w Σ | w S}.

Определение 36 (Двойственная грамматика). Пусть G = (N,Σ,P,S) – порождающая (аналитическая) грамматика. Если Pсостоит из всех правил вида α → β, таких, что β → α P, тогда аналитическая (порождающая) грамматика G1 = (N,Σ,P,S) называется двойственной для грамматики G.

Теорема 1 (О двойственной грамматике). Пусть для порождающей (аналитической) грамматики G = (N,Σ,P,S) построена двойственная аналитическая (порождающая) грамматика G1 = (N,Σ,P,S). Тогда верно, что

L(G) = L(G1).

Доказательство. Пусть G – порождающая грамматика.

Утверждаем, что для любого слова w (N + Σ)

 

 

S w тогда и только тогда, когда

w

S.

(2.1)

G

G1

 

Действительно, можно показать, что

 

 

 

S G w1 G w2 G ··· G wk

 

(2.2)

тогда и только тогда, когда

 

 

 

wk G1 ··· G1 w2 G1 w1 G1

S.

 

(2.3)

По определению Pэто имеет место для k = 1. Рассуждая по индукции, предположим, что утверждение истинно для некоторого k > 1, т. е. (2.2) имеет место тогда и только тогда, когда выполнено (2.3). Но wk G wk+1 тогда и только тогда, когда wk+1 G1 wk. Собирая последнее воедино, получим, что (2.1) верно, а следовательно, верно и утверждение теоремы.

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

В дальнейшем, если особо не оговаривается, под термином «грамматика» будем понимать порождающие грамматики.

16

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