Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора — различия между версиями
| Maryann (обсуждение | вклад) м (→Литература) | Maryann (обсуждение | вклад)  м (→Дерево разбора) | ||
| Строка 51: | Строка 51: | ||
| {{Определение | {{Определение | ||
| |definition= | |definition= | ||
| − | '''Крона''' дерева разбора {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево. | + | '''Крона''' дерева разбора (англ. ''leaves of the parse tree'') {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево. | 
| }} | }} | ||
| <br> | <br> | ||
Версия 21:40, 10 декабря 2014
Содержание
Основные определения
| Определение: | 
| Контекстно-свободной грамматикой (англ. сontext-free grammar) называется грамматика, у которой в левых частях всех правил стоят только одиночные нетерминалы. | 
| Определение: | 
| Контекстно-свободный язык (англ. context-free language) — язык, задаваемый контекстно-свободной грамматикой. | 
Лево- и правосторонний вывод слова
| Определение: | 
| Выводом слова (англ. derivation of a word) называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово . | 
Пример:
Рассмотрим грамматику, выводящую все правильные скобочные последовательности.
и — терминальные символы;
— стартовый нетерминал;
Правила:
Выведем слово :
| Определение: | 
| Левосторонний вывод слова (англ. leftmost derivation) — вывод, где каждая последующая строка получена из предыдущей путем замены по одному из правил самого левого встречающегося в строке нетерминала. | 
| Определение: | 
| Правосторонним выводом слова (англ. rightmost derivation) — вывод, где каждая последующая строка получена из предыдущей путем замены по одному из правил самого правого встречающегося в строке нетерминала. | 
Рассмотрим левосторонний вывод скобочной последовательности из примера:
Дерево разбора
| Определение: | 
| Деревом разбора грамматики (англ. parse tree) называется дерево, в вершинах которого записаны терминалы или нетерминалы. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами, имеют детей. Дети вершины, в которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу (в левой части которого стоит этот нетерминал) и упорядочены так же, как в правой части этого правила. | 
| Определение: | 
| Крона дерева разбора (англ. leaves of the parse tree) — множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево. | 
Построим дерево разбора скобочной последовательности из примера.
 
Однозначные грамматики
| Определение: | 
| Грамматика называется однозначной (англ. unambiguous grammar), если у каждого слова имеется не более одного дерева разбора в этой грамматике. | 
| Лемма: | 
| Пусть  — однозначная грамматика. Тогда  существует ровно один левосторонний (правосторонний) вывод. | 
| Доказательство: | 
| Очевидно, что по дереву разбора однозначно восстанавливается левосторонний(правосторонний) вывод. Поскольку каждое слово из языка выводится только одним деревом разбора, то существует только один левосторонний(правосторонний) вывод этого слова. | 
| Утверждение: | 
| Грамматика из примера не является однозначной. | 
| Выше уже было построено дерево разбора для слова . Построим еще одно дерево разбора для данного слова. Например, оно будет выглядеть так:Таким образом, существует слово, у которого есть более одного дерева разбора в данной грамматике эта грамматика не является однозначной. | 
| Утверждение: | 
| Существуют языки, которые можно задать одновременно как однозначными, так и неоднозначными грамматиками. | 
| Для доказательства достаточно привести однозначную грамматику для языка правильных скобочных последовательностей (неоднозначной грамматикой для данного языка является грамматика из примера выше). Рассмотрим грамматику: и — терминальные символы; — стартовый нетерминал; Правила: Покажем, что эта грамматика однозначна. Для этого, используя индукцию, докажем, что для любого слова , являющегося правильной скобочной последовательностью, в данной грамматике существует только одно дерево разбора. База: Если , то оно выводится только по второму правилу для него существует единственное дерево разбора. Переход: Пусть и : и — правильная скобочная последовательность дерево разбора. Найдем в слове минимальный индекс такой, что слово является правильной скобочной последовательностью. Так как минимальный, то . Из того, что является правильной скобочной последовательностью и — правильные скобочные последовательности, при этом и по индукционному предположению предположению у и существуют единственные деревья разбора. Если мы покажем, что из части первого правила можно вывести только слово , то утверждение будет доказано (так как из первой части первого правила выводится , а из второй только и для каждого из них по предположению существуют единственные деревья разбора). Пусть из была выведена часть слова , где , при этом является правильной скобочной последовательностью, но тогда как минимальный индекс мы должны были выбрать , а не — противоречие. Аналогично из не может быть выведена часть слова , где , потому что тогда не будет правильной скобочной последовательностью, так как в позиции баланс скобок будет отрицательный. Значит, из была выведена часть слова имеет единственное дерево разбора данная грамматика однозначная.Таким образом, для языка правильных скобочных последовательностей мы привели пример как однозначной, так и неоднозначной грамматики. | 
Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют существенно неоднозначными.
См. также
- Формальные грамматики
- Иерархия Хомского формальных грамматик
- Замкнутость КС-языков относительно различных операций
- Существенно неоднозначные языки
Источники информации
- Wikipedia — Context-free grammar
- Википедия — Контекстно-свободная грамматика
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)

