
- •Формальные языки и грамматики
- •Введение
- •1. Предварительные обсуждения
- •2. Формальные грамматики
- •3. Классификация формальных грамматик
- •4. Система составляющих
- •5. Синтаксические диаграммы
- •6. Синтаксическое дерево
- •7. Алгоритмы обхода вершин дерева разбора.
- •7.1 Алгоритм обхода "сверху-вниз".
- •7.2 Алгоритм обхода "снизу-вверх".
- •8. Двоичное дерево
- •9. Свойства двоичного дерева
- •10. Грамматический разбор цепочек
- •10.1. Разбор цепочки "сверху-вниз".
- •10.2. Разбор цепочки "снизу-вверх".
- •11. Операции над языками
- •Заключение
- •Контрольные вопросы и задачи
- •Индивидуальное задание
- •Указатель обозначений
- •Предметный указатель
- •Список литературы
7. Алгоритмы обхода вершин дерева разбора.
При анализе текстов формального языка с помощью синтаксического дерева необходимо совершать упорядоченный обход его вершин так, чтобы в каждой вершине быть не более одного раза. В результате такого обхода будет сформирована правильная последовательность символов, к которой можно применить систему составляющих.
Разработаны два алгоритма обхода синтаксического дерева: "сверху-вниз" и "снизу-вверх".
7.1 Алгоритм обхода "сверху-вниз".
шаг 1. выбрать корень дерева, соответствующий начальному символу J;
шаг 2. выбрать последовательно слева-направо каждую вершину-сток для самой левой вершины-истока;
шаг 3. если вершин-стоков больше нет, то конец, иначе перейти к шагу 2.
Пример 24. Написать правильную цепочку и найти систему составляющих для синтаксического дерева, представленного на рис.6.
Совершая обход вершин дерева согласно правилам алгоритма, правильная цепочка терминальных и нетерминальных символов, отображающая структуру предложения естественного языка, будет иметь вид:
JACc1Da1BEbFGc2Ha2 .
В этой цепочке можно выделить составляющие подцепочки на уровне слов: Cc1 - имя и значение первого прилагательного, Da1 - имя и значение первого существительного, Eb - имя и значение сказуемого, Gc2 - имя и значение второго прилагательного, Ha2 - имя и значение второго существительного, на уровне членов предложения: AСc1Da1 - имя и значение группы подлежащего, FGc2Ha2 - имя и значение дополнения, BEbFGc2Ha2 - имя и значение сказуемого. Головой каждой подцепочки является синтаксическая переменная, что определяет условия для использования левосторонней грамматики
Система составляющих имеет вид
на уровне членов предложения:
CJ = { ( A,2); ( B,7); ( F,10) };
на уровне слов:
СJ = { (C,3); (D,5); (E,8); (G,11); (H,13) }.
Каждая составляющая начинается в узле дерева и охватывает все множество вершин-стоков, связанных с этой вершиной-истоком. Составляющие (С,3) и (D,5) вложены в составляющую (A,2), составляющие (G,11) и (H,13) вложены в составляющую (F,10), cоставляющие (E,8) и (F,10) вложены в составляющую (B,7).
Пример 25. Написать правильную последовательность символов и найти систему составляющих для синтаксического дерева, представленного на рис.7.
Совершая обход дерева "сверху-вниз", получим цепочку терминальных и нетерминальных символов, раскрывающую синтаксическую конструкцию синтаксической переменной <программа> языка программирования Паскаль:
JA1a1A2a2c1B1B2a3B3B4C1А3ib1C2a4c2 .
Основными составляющими в написании программы являются:
<заголовок-программы> - A1a1A2a2c1 ;
";" - c1 ;
<блок > - B1B2a3B3B4C1b1C2a4 ;
"." - c2 .
Система составляющих для этой цепочки может быть записана так:
CJ = { (A1,2); (c1,6); (B1,10); (c2,19) }.
В каждую из составляющих вложены другие составляющие, имеющие меньшую длину. Так, например,
СA1 = { (A2,3) }.
Cоставляющая, голова которой есть терминальный символ, определяет служебное слово или специальный символ, имеющий фиксированный смысл.
Пример 26. Написать правильную последовательность символов и найти систему составляющих для синтаксического дерева, представленного на рис. 8.
Совершая обход дерева "сверху-вниз", получим следующую цепочку:
С2С3С4С1A3iD2xC4C1A3iD1+C3C4C1A3iD2xC4C1A3i.
Если принять основными составляющими цепочки нетерминальные символы С1 и С3, то систему составляющих можно записать так:
СС2 = { (C1,4);(C1,10);(C1,17);(C1,23);(C3,2);(C3,15)}.
Составляющая С1 есть голова подцепочки С1A3i.