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