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

advertisement
Лекция 7
Контекстносвободные языки
Определение 7.1
• Графом КС-грамматики G = (N, , P, S) назовем такой
ориентированный неупорядоченный граф (N  
{}, R), где множество N{} есть множество
вершин графа, а отношение R задает множество дуг.
Вершины A и X находятся в отношении R (связаны
дугой) тогда и только тогда, когда существует
правило грамматики G вида AX.
• Очевидно, что граф некоторой грамматики может
содержать циклы, а также в любую вершину графа
может входить более одной дуги, из любой вершины
графа может выходить более одной дуги.
• Напомним, что по определению некоторый
конечный граф является деревом, если в
нем, во-первых, существует единственная
вершина (называемая корнем), в которую не
входит ни одна дуга, во-вторых, во всякую
вершину, не являющуюся корнем, входит
точно одна дуга, и, в-третьих, в нем нет
циклов. Вследствие определения, в каждую
вершину дерева ведет только один путь из
корня.
Определение 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) SaSbS
• (2) SbSaS
• (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 (0i<n) имеет вид xiAii, где xi*, AiN и
i(N)*.
• Каждая следующая цепочка i+1 левого
вывода получается из предыдущей i
заменой самого левого нетерминала Ai
правой частью некоторого правила. В правом
выводе заменяется самый правый
нетерминал.
• Пример 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
Определение 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 построить примеры дерева вывода
и соответствующих выводов. Отметить левый
и правый выводы в этой грамматике.
Выписать все кроны сечения дерева вывода.
Download