Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория языков программирования и методы трансляции..pdf
Скачиваний:
28
Добавлен:
05.02.2023
Размер:
3.41 Mб
Скачать

87

Отношения ≡ для k ≥ 0 имеют следующие классы эквивалентности:

класс отношения ≡0 – {A, F}, {B, C, D, E};

класс отношения ≡1 – {A, F}, {B, E}, {C, D};

класс отношения ≡2 – {A, F}, {B, E}, {C, D}.

Так как ≡2 = ≡1, то ≡ = ≡1. Приведенный автомат M' будет ({[A], [B], [C], {a, b}, δ', A, {[A]}}), где δ' определяется следующей табл. 3.4.

Таблица 3.4 – Приведенный конечный автомат

Состояние

a

b

 

 

 

[A]

[A]

[B]

 

 

 

[B]

[B]

[C]

 

 

 

[C]

[C]

[A]

 

 

 

Здесь:

[A] – выбрано для представления класса {A, F};

[B] – выбрано для представления класса {B, E};

[C] – выбрано для представления класса {C, D}.

·· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

3.10 КОНТЕКСТНО-СВОБОДНЫЕ ЯЗЫКИ

Из четырех классов грамматики иерархии Хомского класс контекстно-

свободных языков наиболее важен с точки зрения приложения к языкам про-

граммирования и компиляции. С их помощью можно определить большую часть синтаксических структур языков программирования. Кроме того, они служат основой различных схем перевода, т.к. в ходе процесса компиляции синтаксическую структуру, передаваемую входной программе КС-

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

[1].

Синтаксическую структуру входной цепочки можно определить по по-

следовательности правил, применяемых при выводе этой цепочки. Таким об-

88

разом, на часть компилятора, называемую синтаксическим анализатором,

можно смотреть как на устройство, которое пытается выяснить, существует ли в некоторой фиксированной КС-грамматике вывод входной цепочки.

Естественно, что эта задача нетривиальная – по данной КС-грамматике

G и входной цепочке w выяснить, принадлежит ли w языку L(G), и если «да»,

то найти вывод цепочки w в грамматике G.

3.10.1ДЕРЕВЬЯ ВЫВОДОВ

Вграмматике может быть несколько выводов, эквивалентных в том смысле, что во всех них применяются одни и те же правила в одних и тех же местах, но в различном порядке. КС-грамматика позволяет ввести удобное графическое представление класса эквивалентных выводов, называемое де-

ревом выводов [5].

Дерево вывода в КС-грамматике G = (N, Σ, P, S) – это помеченное упо-

рядоченное дерево, каждая вершина которого помечена символом из множества N Σ{e}, где:

N – конечное множество нетерминальных символов;

Σ – непересекающееся с N множество терминальных символов;

P – конечное подмножество множества N(N Σ)* (элемент (A, α)

множества P называется правилом или продукцией A α);

S – выделенный символ из N, называемый начальным или исходным символом.

Если внутренняя вершина помечена символом A, а ее прямые потомки

– символами X1, X2, …, Xn, то A X1 | X2 | … | Xn – правило грамматики.

Помеченное упорядоченное дерево D называется деревом вывода (или деревом разбора) в КС-грамматике G(A) = (N, Σ, P, A), если выполняются следующие условия:

1) корень дерева помечен A;

89

2)если D1, D2, …, Dk – поддеревья, над которыми доминируют прямые потомки корня дерева, и корень Di помечен Xi, то A X1 | X2 | … | Xn

– правило из множества P. Di должно быть деревом вывода в грам-

матике G(Xi) = (N, Σ, P, Xi), если Xi – нетерминал, и Di состоит из единственной вершины, помеченной Xi, если Xi – терминал.

· · · · · · · · · · · · · · · · · · · · · · · ·

 

Пример · · · · · · · · · · · · · · · · · · · · · · ·

 

 

 

Имеем грамматику G = G(S) с правилами S aSbS | bSaS | e (рис. 3.7).

Возможные варианты деревьев вывода:

S 1 aSbS 2 abSaSb 3 abab S 1 bSaS 2 babSaS 3 baba S 1 e

S S S

S

 

S

S

 

S

a

b

b

a

 

e

S

S

 

 

S

S

b

a

e

e b

 

a

e

e

e

e

Рисунок 3.7 – Деревья выводов

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Заметим, что существует единственное упорядочение вершин упорядо-

ченного дерева, у которого прямые потомки вершины упорядочиваются

«слева направо».

90

Допустим, что n – вершина и n1, n2, …, nk – ее прямые потомки. Тогда,

если i < j, то вершина ni и все ее потомки считаются расположенными левее вершины ni и всех ее потомков.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Кроной дерева вывода назовем цепочку, которая получит-

ся, если выписать слева направо метки листьев.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · ·

 

Пример · · · · · · · · · · · · · · · · · · · · · · ·

 

 

 

Например, кроны деревьев на рис. 3.7 – abab, baba, e.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Сечением дерева D назовем такое множество C вершин дерева D, что

1)никакие две вершины из C не лежат на одном пути в D;

2)ни одну вершину дерева D нельзя добавить к C, не нарушив свой-

ства 1).

Частные случаи:

множество вершин дерева, состоящего из одного корня, является сечением;

листья также образуют сечение.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Кроной сечения дерева D является цепочка, получаемая конкатенацией (в порядке слева направо) меток вершин, образу-

ющих некоторое сечение.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · ·

 

Пример · · · · · · · · · · · · · · · · · · · · · · ·

 

 

 

Крона сечения дерева, приведенного на рис. 3.8 – abaSbS.

91

S

S

 

S

a

 

b

S

 

S

 

 

b

a

e

e e

Рисунок 3.8 – Пример сечения дерева

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Пусть S = α1, α2, …, αn – вывод цепочки αn из S в КС-

грамматике G = (N, Σ, P, S). Тогда в G можно построить дерево вывода D, для которого αn – крона, а α1, α2, …, αn–1 – некоторые из крон сечения.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Пусть D – дерево вывода в КС-грамматике G = (N, Σ, P, S) с

кроной α. Тогда S * α (транзитивное и рефлексивное замыкание

*, т.е. α выводима из S).

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Доказательство. Пусть C0, C1, …, Cn – такая последовательность сече-

ний дерева D, что

1) C0 – содержит только один корень дерева D;

92

2)Ci+1 для 0 ≤ i < n получается из Ci заменой одной нетерминальной вершины ее прямыми потомками;

3)Cn – крона дерева D.

Ясно, что хотя бы одна такая последовательность существует.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Если αi – крона сечения Ci, то существующий вывод α1, α2,

…, αn называется левым выводом цепочки αn из α0 в грамматике

G. Правый вывод определяется аналогично.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Если S = α1, α2, …, αn–1 = w – левый вывод терминальной цепочки w, то каждая цепочка αi (0 ≤ i < n) имеет вид xiAiβi, где xi Σ*, Ai N и βi(N Σ)*.

Каждая следующая цепочка αi+1 левого вывода получается из преды-

дущей цепочки αi заменой самого левого нетерминала Ai правой частью неко-

торого правила.

· · · · · · · · · · · · · · · · · · · · · · · ·

 

Пример · · · · · · · · · · · · · · · · · · · · · · ·

 

 

 

Рассмотрим КС-грамматику G0 с правилами:

EE+T | T

TT*F | F

F(E) | a.

Нарисуем дерево вывода (рис. 3.9).