Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ЛО.DOC
Скачиваний:
39
Добавлен:
23.03.2016
Размер:
534.53 Кб
Скачать

3.4. Контекстно-свободные грамматики

Свойства контекстно-свободных ( КС) грамматик.

  1. Дают возможность изучения структур синтаксических деревьев вывода.

  2. Обладают способностью порождать бесконечные языки.

Определение: 1) Цепочку  будем называть подцепочкой цепочки , если последняя может быть представлена в виде . Здесь и – некоторые (возможно, пустые ) цепочки.

2) Вхождением подцепочки  в цепочку будем называть пару объектов ( i) , где – данная подцепочка, а i – порядковый номер левого символа подцепочки в цепочке .

Пример 9: Цепочка acac включает в себя две подцепочки ac. Таким образом, можно рассматривать два возможных вхождения подцепочки ac: (ac,1) и (ac,3).

3.4.1. Определение дерева вывода.

Под деревом понимается конечный ориентированный граф, обладающий следующими свойствами:

  1. имеется вершина, в которую не входит ни одна дуга; эта вершина – корень дерева;

  2. в каждую из его остальных вершин входит лишь одна дуга;

  3. граф не содержит контуров.

Уровень вершины дерева – длина от этой вершины до корня, т.е. число дуг.

Высота дерева – максимальный уровень вершин.

Рассмотрим две вершины: х и у. Если в дереве существует путь из х в у, то х – предшествует у, а у –следует из х.

Вершины, не предшествующие никаким вершинам – заключительные.

Пример 10: Дерево вывода числа +23.6e-2

.

.ю

3.4.2. Алгоритм получения скобочной записи синтаксического дерева вывода.

Линейная скобочная запись является терминальной цепочкой, вывод которой представлен соответствующим деревом, с выделенными в ней синтаксическими конструкциями. Для обозначения начала и конца каждой конструкции используются скобки. После левой и перед правой скобкой, которые ограничивают какую-либо выделяемую подцепочку, записывается породивший ее в данном выводе нетерминальный символ. Построение цепочки происходит путем приписывания справа символов к уже построенной части цепочки.

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

  1. Если обозреваемая вершина имеет выходящие из нее дуги, то переходим к шагу 2, иначе – к шагу 5.

  1. Приписываем цепочке левую скобку и символ, соответствующий обозреваемой вершине. Переходим к шагу 3.

  2. Если среди дуг, выходящих из обозреваемой вершины есть непомеченные, помечаем левую из них, т.е. ведущую в наименьшую вершину и переходим к шагу 1. В противном случае – к шагу 4.

  3. Приписываем к цепочке символ, соответствующий обозреваемой вершине и правую скобку. Если в данную вершину входит дуга, обозреваем вершину из которой она выходит и переходим к шагу 3. Если входящей дуги нет – это корень.

  4. приписываем цепочке соответствующий терминальный сим­вол, обозреваем предыдущую вершину, переходим к шагу 3.

Пример 11: Линейная скобочная запись дерева вывода, приведенная в примере 9 выглядит следующим образом:

(Ч+(Н(Д(Б(Б(Ц2Ц)Б) (Ц5Ц)Б) (М.(Б(Ц6Ц)Б)М)Д) (Пe (Ф-(Б(Ц2Ц)Б)Ф)П)Н)Ч) .

Определение: 1) Вывод в КС-грамматике будем называть левосторонним (правосторонним), если правило вывода применяется к самому левому (правому) вхождению нетерминальной цепочки вывода.

2) КС-грамматику, в которой существует более чем один левосторонний вывод некоторой терминальной цепочки, будем называть неоднозначной, а язык, порождаемый такой грамматикой, – синтаксически неоднозначным.

3) Язык, все порождающие КС-грамматики которого неоднозначны, будем называть существенно синтаксически неоднозначным.

При помощи КС-грамматик можно представить не все, а лишь часть синтаксических правил языков программирования. Те же правила, которые средствами КС-грамматик не описываются, называются контекстными условиями и задаются обычно неформально – при помощи английского, русского и других естественных языков.