1 / 20

Лекция 7

Лекция 7. Контекстно-свободные языки. Определение 7.1.

verdi
Download Presentation

Лекция 7

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Лекция 7 Контекстно-свободные языки

  2. Определение 7.1 • Графом КС-грамматики G = (N, , P, S) назовем такой ориентированный неупорядоченный граф (N {}, R), где множество N{} есть множество вершин графа, а отношение R задает множество дуг. Вершины A и X находятся в отношении R (связаны дугой) тогда и только тогда, когда существует правило грамматики G вида AX. • Очевидно, что граф некоторой грамматики может содержать циклы, а также в любую вершину графа может входить более одной дуги, из любой вершины графа может выходить более одной дуги.

  3. Напомним, что по определению некоторый конечный граф является деревом, если в нем, во-первых, существует единственная вершина (называемая корнем), в которую не входит ни одна дуга, во-вторых, во всякую вершину, не являющуюся корнем, входит точно одна дуга, и, в-третьих, в нем нет циклов. Вследствие определения, в каждую вершину дерева ведет только один путь из корня.

  4. Определение 7.2 • Дерево вывода в КС-грамматике G = (N, , P, S) – помеченное упорядоченное дерево, каждая вершина которого помечена символом из множества N  {}, причем если некоторая вершина помечена символом A, а ее прямые потомки - символами X1, X2, … , Xn , то A X1X2 … Xn - правило этой грамматики.

  5. Определение 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.

  6. Пример 7.1. Рассмотрим грамматику G=G(S) с правилами • (1) SaSbS • (2) SbSaS • (3) S • Примеры деревьев вывода в данной грамматике: • а) дерево вывода, состоящее из единственной вершины S; • б) дерево вывода, состоящее из двух вершин: S 

  7. в) дерево вывода, состоящее из 5 вершин S a S b S

  8. г) деревовида S a S b S b S a S

  9. Определение 7.1 • Кроной дерева вывода назовем цепочку, которая получается, если выписать слева направо метки листьев. • Пример 7.2. Для деревьев предыдущего примера кронами являются: • а) S б)  в) aSbS г) abSaSbS.

  10. Определение 7.5 • Сечением дерева D назовем такое множество C вершин дерева D, что • никакие две вершины из C не лежат на одном пути в D, • ни одну вершину D нельзя добавить к C, не нарушив свойства (1). • Пример 7.3. Примером сечения для дерева примера 6.1.г. является: множество вершин {a, S, b, S}. Если в это множество добавить одну из вершин более нижнего уровня, то полученное множество не будет кроной, так как нарушится свойство (1).

  11. Определение 7.6 • Определим крону сечения дерева D как цепочку, которая получается конкатенацией (в порядке слева направо) меток вершин, образующих некоторое сечение. • Пример 7.4. Крона сечения примера 6.3. - цепочка aSbS.

  12. Лемма 7.1 • Пусть D=0,1, … ,n – вывод цепочки n из S в КС-грамматике G = (N, , P, S). Тогда в G можно построить дерево вывода D, для которого n – крона, а 0,1, … ,n-1 – некоторые из крон сечений.

  13. Лемма 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. Лемма доказана.

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

  15. Определение 7.7 • Если в доказательстве леммы сечение Сi+1 получается из Сi заменой самой левой нетерминальной вершины в Сi ее прямыми потомками, то соответствующий вывод 0,1,…,n называется левым выводом цепочки n из 0 в грамматике G. Правый вывод определяется аналогично, надо только в предыдущем предложении читать «самой правой» вместо «самой левой». • Заметим, что левый (или правый) вывод определяется по дереву вывода однозначно. Левый (правый) вывод является упорядочиваемым выводом.

  16. Если S=0,1,…,n=- левый вывод терминальной цепочки , то каждая цепочка i (0i<n) имеет вид xiAii, где xi*, AiN и i(N)*. • Каждая следующая цепочка i+1 левого вывода получается из предыдущей i заменой самого левого нетерминала Ai правой частью некоторого правила. В правом выводе заменяется самый правый нетерминал.

  17. Пример 7.5. Рассмотрим грамматику со схемой • EE+T|T • TT*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

  18. Определение 7.8 • Цепочку  будем называть левовыводимой (в грамматике G), если существует левый вывод S=0,1,…,n=, и писать S=>*l  (или S=>*r ). Один шаг левого вывода обозначим через =>l a шаг правого вывода – через =>r. Определение 7.8 • Пусть G = (N, , P, S)- КС – грамматика. S=>* тогда и только тогда, когда в G существует дерево вывода с кроной .

  19. Определение 7.9 • КС – грамматику G называют неоднозначной, если существует хотя бы одна цепочка L(G), которая является кроной двух или более различных деревьев выводов в G. Это равносильно тому, что некоторая цепочка L(G) имеет два или более разных левых (правых) вывода. В противном случае КС-грамматика G называется однозначной.

  20. Задание 10 • Для контекстно-свободной грамматики задания 7 построить примеры дерева вывода и соответствующих выводов. Отметить левый и правый выводы в этой грамматике. Выписать все кроны сечения дерева вывода.

More Related