Опубликован: 06.08.2007 | Доступ: свободный | Студентов: 1899 / 1053 | Оценка: 4.45 / 4.29 | Длительность: 18:50:00
Специальности: Программист
Лекция 5:

Синтаксический анализ

Аннотация: В данной лекции рассматривается понятие синтаксического анализа. Приводятся определения понятий упорядоченного графа, дерева вывода, автомата с магазинной памятью и его конфигурации. Приведены примеры задач, алгоритмов и доказательства теорем синтаксического анализа.

Контекстно-свободные грамматики и автоматы с магазинной памятью

Пусть G = (N, T, P, S) - КС-грамматика. Введем несколько важных понятий и определений.

Вывод, в котором в любой сентенциальной форме на каждом шаге делается подстановка самого левого нетерминала, называется левосторонним. Если S=>* u в процессе левостороннего вывода, то u - левая сентенциальная форма. Аналогично определим правосторонний вывод. Обозначим шаги левого (правого) вывода =>l (=>r).

Упорядоченным графом называется пара (V,E), где V есть множество вершин, а E - множество линейно упорядоченных списков дуг, каждый элемент которого имеет вид ((v, v1), (v, v2), ... , (v, vn)). Этот элемент указывает, что из вершины v выходят n дуг, причем первой из них считается дуга, входящая в вершину v1, второй - дуга, входящая в вершину v2, и т.д.

Упорядоченным помеченным деревом называется упорядоченный граф (V,E), основой которого является дерево и для которого определена функция f : V -> F (функция разметки) для некоторого множества F.

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

(1) корень дерева D помечен S ;

(2) каждый лист помечен либо a \in T, либо e ;

(3) каждая внутренняя вершина помечена нетерминалом A \in N ;

(4) если X - нетерминал, которым помечена внутренняя вершина и X1, ... , Xn - метки ее прямых потомков в указанном порядке, то X -> X1 ... Xk - правило из множества P ;

(5) Цепочка, составленная из выписанных слева направо меток листьев, равна w.

Процесс определения принадлежности данной строки языку, порождаемому данной грамматикой, и, в случае указанной принадлежности, построение дерева разбора для этой строки, называется синтаксическим анализом. Можно говорить о восстановлении дерева вывода (в частности, правостороннего или левостороннего) для строки, принадлежащей языку. По восстановленному выводу можно строить дерево разбора.

Грамматика G называется неоднозначной, если существует цепочка w, для которой имеется два или более различных деревьев вывода в G.

Грамматика G называется леворекурсивной, если в ней имеется нетерминал A такой, что для некоторой цепочки R существует вывод A \Rightarrow ^{+}A\alpha.

Автомат с магазинной памятью (МП-автомат) - это семерка M = (Q, T, \Gamma , D, q_{0}, Z_{0}, F), где

(1) Q - конечное множество состояний, представляющих всевозможные состояния управляющего устройства;

(2) T - конечный входной алфавит;

(3) \Gamma - конечный алфавит магазинных символов ;

(4) D - отображение множества Q x (T \cup  \{ e\} ) \times \Gamma в множество конечных подмножеств Q  \times \Gamma ^{*}, называемое функцией переходов ;

(5) q_0 \in Q - начальное состояние управляющего устройства;

(6) Z_0 \in \Gamma - символ, находящийся в магазине в начальный момент ( начальный символ магазина );

(7) F \subseteq Q - множество заключительных состояний.

Конфигурация МП-автомата - это тройка (q, w, u), где

(1) q \in Q - текущее состояние управляющего устройства;

(2) w \in T^* - непрочитанная часть входной цепочки; первый символ цепочки w находится под входной головкой; если w = e, то считается, что вся входная лента прочитана;

(3) u \in \Gamma^* - содержимое магазина; самый левый символ цепочки u считается верхним символом магазина; если u = e, то магазин считается пустым.

Такт работы МП-автомата M будем представлять в виде бинарного отношения \vdash, определенного на конфигурациях.

Будем писать

(q, \; aw, \; Zu) \vdash (p, \; w, \; vu)

если множество D(q, a, Z) содержит (p, v), где q, \; p \in Q, \; a \in T \cup \{e\}, \; w \in T^*, \; Z \in  \Gamma^* и u, \; v \in \Gamma^* (верхушка магазина слева).

Начальной конфигурацией МП-автомата M называется конфигурация вида (q0, w, Z0), где w\in T^*, то есть управляющее устройство находится в начальном состоянии, входная лента содержит цепочку, которую нужно проанализировать, а в магазине имеется только начальный символ Z0.

>Заключительной конфигурацией называется конфигурация вида (q, e, u), где q \in F, u \in \Gamma^*, то есть управляющее устройство находится в одном из заключительных состояний, а входная цепочка целиком прочитана.

Введем транзитивное и рефлексивно-транзитивное замыкание отношения \vdash, а также его степень k > 0 (обозначаемые \vdash^+, \vdash^* и \vdash^k соответственно).

Говорят, что цепочка w допускается МП-автоматом M, если (q_0, w, Z_0) \vdash^* (q, e, u) для некоторых q \in F и u \in \Gamma^*.

Множество всех цепочек, допускаемых автоматом M называется языком, допускаемым (распознаваемым, определяемым) автоматом M (обозначается L(M) ).

Пример 4.1. Рассмотрим МП-автомат

M = ({q0, q1, q2}, {a, b}, {Z, a, b}, D, q0, Z, {q2}),

у которого функция переходов D содержит элементы:

D(q0, a, Z) = {(q0, aZ)},
D(q0, b, Z) = {(q0, bZ)},
D(q0, a, a) = {(q0, aa), {q1, e)},
D(q0, a, b) = {(q0, ab)},
D(q0, b, a) = {(q0, ba)},
D(q0, b, b) = {(q0, bb), (q1, e)},
D(q1, a, a) = {(q1, e)},
D(q1, b, b) = {(q1, e)},
D(q1, e, Z) = {(q2, e)}.

Нетрудно показать, что L(M) = \{ww^R \! | \! w \; \in \; \{a, b\}^+\}, где wR обозначает обращение ("переворачивание") цепочки w.

Иногда допустимость определяют несколько иначе: цепочка w допускается МП-автоматом M, если (q_0, w, Z_0) \vdash^* (q, e, e) для некоторого q \in Q. В таком случае говорят, что автомат допускает цепочку опустошением магазина. Эти определения эквивалентны, ибо справедлива