Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора — различия между версиями
Maryann (обсуждение | вклад) |
Maryann (обсуждение | вклад) м |
||
Строка 84: | Строка 84: | ||
}} | }} | ||
<br> | <br> | ||
− | + | {{Утверждение | |
+ | |statement = Существуют языки, которые можно задать одновременно как однозначными, так и неоднозначными грамматиками. | ||
+ | |proof = | ||
+ | Для доказательства достаточно привести однозначную грамматику для языка правильных скобочных последовательностей (неоднозначной грамматикой для данного языка является грамматика из примера выше). | ||
− | + | Рассмотрим грамматику: | |
<tex>"("</tex> и <tex>")"</tex> {{---}} терминальные символы; | <tex>"("</tex> и <tex>")"</tex> {{---}} терминальные символы; | ||
Строка 93: | Строка 96: | ||
Правила:<br> | Правила:<br> | ||
− | <tex>S\rightarrow (S)S</tex><br> | + | 1) <tex>S\rightarrow (S)S</tex><br> |
− | <tex>S\rightarrow \varepsilon</tex><br> | + | 2) <tex>S\rightarrow \varepsilon</tex><br> |
− | + | ||
− | + | Покажем, что эта грамматика однозначна. | |
− | + | ||
− | + | Для этого, используя индукцию, докажем, что для любого слова <tex>\omega</tex>, являющегося правильной скобочной последовательностью, в данной грамматике существует только одно дерево разбора. | |
+ | |||
+ | '''База:''' Если <tex>\omega=\varepsilon</tex>, то оно выводится только по второму правилу <tex>\Rrightarrow</tex> для него существует единственное дерево разбора. | ||
+ | '''Переход:''' Пусть <tex>\left\vert \omega \right\vert=n</tex> и <tex>\forall \upsilon</tex> из языка: <tex>\left\vert \upsilon \right\vert < n</tex> все выполнено. Тогда найдем в слове <tex>\omega</tex> минимальный индекс <tex>i \neq 0:</tex> слово <tex>\omega[0..i]</tex> является правильной скобочной последовательностью. Так как <tex>i \neq 0</tex> минимальный, то <tex>\omega[0..i]=(\tau)</tex>, при этом <tex>\tau</tex> и <tex>\omega[i+1..n-1]</tex> {{---}} правильные скобочные последовательности. По предположению для <tex>\tau:\left\vert \tau \right\vert<n</tex> и <tex>\omega[i+1..n-1]:\left\vert \omega[i+1..n-1] \right\vert<n</tex> существует единственное дерево разбора <tex>\Rightarrow</tex> для <tex>\omega</tex> тоже существует единственное дерево разбора <tex>\Rightarrow</tex> переход доказан, а значит, данная грамматика является однозначной. | ||
}} | }} | ||
− | + | ||
Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют [[Существенно неоднозначные языки|''существенно неоднозначными'']]. | Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют [[Существенно неоднозначные языки|''существенно неоднозначными'']]. | ||
Версия 23:39, 9 декабря 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 (рус.)