Лекция 7 Контекстносвободные языки Определение 7.1 • Графом КС-грамматики G = (N, , P, S) назовем такой ориентированный неупорядоченный граф (N {}, R), где множество N{} есть множество вершин графа, а отношение R задает множество дуг. Вершины A и X находятся в отношении R (связаны дугой) тогда и только тогда, когда существует правило грамматики G вида AX. • Очевидно, что граф некоторой грамматики может содержать циклы, а также в любую вершину графа может входить более одной дуги, из любой вершины графа может выходить более одной дуги. • Напомним, что по определению некоторый конечный граф является деревом, если в нем, во-первых, существует единственная вершина (называемая корнем), в которую не входит ни одна дуга, во-вторых, во всякую вершину, не являющуюся корнем, входит точно одна дуга, и, в-третьих, в нем нет циклов. Вследствие определения, в каждую вершину дерева ведет только один путь из корня. Определение 7.2 • Дерево вывода в КС-грамматике G = (N, , P, S) – помеченное упорядоченное дерево, каждая вершина которого помечена символом из множества N {}, причем если некоторая вершина помечена символом A, а ее прямые потомки - символами X1, X2, … , Xn , то A X1X2 … Xn - правило этой грамматики. Определение 7.3 • Помеченное упорядоченное дерево D называется деревом вывода (или деревом разбора) в КСграмматике G(A) = (N, , P, A), если выполнены следующие условия: • Корень дерева D помечен A. • Если D1, …, Dk – поддеревья, над которыми доминируют прямые потомки корня дерева, и корень Di помечен Xi , то A X1X2 … Xk – правило из множества P. Di должно быть деревом вывода в грамматике G(Xi) = (N, , P, Xi), если Xi – нетерминал, и Di состоит из единственной вершины, помеченной Xi , если Xi – терминал. • Если корень дерева имеет единственного потомка, помеченного , то этот потомок образует дерево, состоящее из единственной вершины, и A – правило из множества P. • Пример 7.1. Рассмотрим грамматику G=G(S) с правилами • (1) SaSbS • (2) SbSaS • (3) S • Примеры деревьев вывода в данной грамматике: • а) дерево вывода, состоящее из единственной вершины S; • б) дерево вывода, состоящее из двух вершин: S • в) дерево вывода, состоящее из 5 вершин S a S b S • г) дерево вида S a S b S b a S S Определение 7.1 • Кроной дерева вывода назовем цепочку, которая получается, если выписать слева направо метки листьев. • Пример 7.2. Для деревьев предыдущего примера кронами являются: • а) S б) в) aSbS г) abSaSbS. Определение 7.5 • Сечением дерева D назовем такое множество C вершин дерева D, что • никакие две вершины из C не лежат на одном пути в D, • ни одну вершину D нельзя добавить к C, не нарушив свойства (1). • Пример 7.3. Примером сечения для дерева примера 6.1.г. является: множество вершин {a, S, b, S}. Если в это множество добавить одну из вершин более нижнего уровня, то полученное множество не будет кроной, так как нарушится свойство (1). Определение 7.6 • Определим крону сечения дерева D как цепочку, которая получается конкатенацией (в порядке слева направо) меток вершин, образующих некоторое сечение. • Пример 7.4. Крона сечения примера 6.3. цепочка aSbS. Лемма 7.1 • Пусть D=0,1, … ,n – вывод цепочки n из S в КС-грамматике G = (N, , P, S). Тогда в G можно построить дерево вывода D, для которого n – крона, а 0,1, … ,n-1 – некоторые из крон сечений. Лемма 7.2 • Пусть D – дерево вывода в КС-грамматике G=(N,,P,S) с кроной . Тогда S =>* . • Доказательство леммы. • Пусть C0, C1, C2, … , Cn – такая последовательность сечений дерева D, что: 1. C0 содержит только корень дерева D, 2. Ci+1 для 0 i n получается из Ci заменой одной нетерминальной вершины ее прямыми потомками, 3. Cn – крона дерева D. • Ясно, что хотя бы одна такая последовательность существует. • Если i- крона сечения Сi, то 0,1,…,n –вывод цепочки n из 0 в G. Лемма доказана. • Заметим, что одному и тому же дереву вывода может соответствовать несколько выводов. Если дерево вывода в некоторой КС-грамматике соответствует полному выводу, то его крона является цепочкой, составленной из символов терминального словаря. • Среди всех выводов, которые можно построить по данному дереву, два вывода особенно интересны. Определение 7.7 • Если в доказательстве леммы сечение Сi+1 получается из Сi заменой самой левой нетерминальной вершины в Сi ее прямыми потомками, то соответствующий вывод 0,1,…,n называется левым выводом цепочки n из 0 в грамматике G. Правый вывод определяется аналогично, надо только в предыдущем предложении читать «самой правой» вместо «самой левой». • Заметим, что левый (или правый) вывод определяется по дереву вывода однозначно. Левый (правый) вывод является упорядочиваемым выводом. • Если S=0,1,…,n=- левый вывод терминальной цепочки , то каждая цепочка i (0i<n) имеет вид xiAii, где xi*, AiN и i(N)*. • Каждая следующая цепочка i+1 левого вывода получается из предыдущей i заменой самого левого нетерминала Ai правой частью некоторого правила. В правом выводе заменяется самый правый нетерминал. • Пример 7.5. Рассмотрим грамматику со схемой • EE+T|T • TT*F|F • F(E)|a • Левый вывод цепочки a+a в этой грамматике имеет вид: • E=>E+T=>T+T=>F+T=>a+T=>a+F=>a+a • Правый вывод цепочки a+a в этой грамматике имеет вид: • E=>E+T=>E+F=>E+a=>T+a=>F+a=>a+a Определение 7.8 • Цепочку будем называть левовыводимой (в грамматике G), если существует левый вывод S=0,1,…,n=, и писать S=>*l (или S=>*r ). Один шаг левого вывода обозначим через =>l a шаг правого вывода – через =>r. Определение 7.8 • Пусть G = (N, , P, S)- КС – грамматика. S=>* тогда и только тогда, когда в G существует дерево вывода с кроной . Определение 7.9 • КС – грамматику G называют неоднозначной, если существует хотя бы одна цепочка L(G), которая является кроной двух или более различных деревьев выводов в G. Это равносильно тому, что некоторая цепочка L(G) имеет два или более разных левых (правых) вывода. В противном случае КСграмматика G называется однозначной. Задание 10 • Для контекстно-свободной грамматики задания 7 построить примеры дерева вывода и соответствующих выводов. Отметить левый и правый выводы в этой грамматике. Выписать все кроны сечения дерева вывода.