Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора — различия между версиями
Maryann (обсуждение | вклад) |
Maryann (обсуждение | вклад) |
||
Строка 11: | Строка 11: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Выводом слова''' <tex>\alpha</tex> называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово <tex>\alpha</tex>. | + | '''Выводом слова''' (англ. ''derivation of a word'') <tex>\alpha</tex> называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово <tex>\alpha</tex>. |
}} | }} | ||
− | + | '''Пример:''' | |
+ | |||
+ | Грамматика, выводящая все правильные скобочные последовательности. | ||
Терминальные символы {{---}} <tex>"("</tex> и <tex>")"</tex>; | Терминальные символы {{---}} <tex>"("</tex> и <tex>")"</tex>; | ||
Строка 29: | Строка 31: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | ''' | + | '''Левосторонний вывод слова''' (англ. ''leftmost derivation'')<tex>\alpha</tex> {{---}} вывод, где каждая последующая строка получена из предыдущей путем замены по одному из правил самого левого встречающегося в строке нетерминала. |
}} | }} | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Правосторонним выводом слова <tex>\alpha</tex> | + | '''Правосторонним выводом слова''' (англ. '' rightmost derivation'') <tex>\alpha</tex> {{---}} вывод, где каждая последующая строка получена из предыдущей путем замены по одному из правил самого правого встречающегося в строке нетерминала. |
}} | }} | ||
<br> | <br> | ||
− | Рассмотрим левосторонний вывод | + | Рассмотрим левосторонний вывод скобочной последовательности из примера:<br> |
<tex>\boldsymbol{S}\Rightarrow (\boldsymbol{S})S \Rightarrow ((\boldsymbol{S})S)S\Rightarrow (()\boldsymbol{S})S\Rightarrow(()\boldsymbol{S}(S))S\Rightarrow(()(\boldsymbol{S}))S\Rightarrow(()(\boldsymbol{S}(S)))S\Rightarrow(()((\boldsymbol{S})))S\Rightarrow(()(()))\boldsymbol{S}\Rightarrow(()(()))(\boldsymbol{S})S\Rightarrow(()(()))()\boldsymbol{S}\Rightarrow(()(()))()</tex> | <tex>\boldsymbol{S}\Rightarrow (\boldsymbol{S})S \Rightarrow ((\boldsymbol{S})S)S\Rightarrow (()\boldsymbol{S})S\Rightarrow(()\boldsymbol{S}(S))S\Rightarrow(()(\boldsymbol{S}))S\Rightarrow(()(\boldsymbol{S}(S)))S\Rightarrow(()((\boldsymbol{S})))S\Rightarrow(()(()))\boldsymbol{S}\Rightarrow(()(()))(\boldsymbol{S})S\Rightarrow(()(()))()\boldsymbol{S}\Rightarrow(()(()))()</tex> | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Деревом разбора грамматики''' (англ. ''parse tree'') называется дерево, в вершинах которого записаны терминалы или нетерминалы, | + | '''Деревом разбора грамматики''' (англ. ''parse tree'') называется дерево, в вершинах которого записаны терминалы или нетерминалы. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами, имеют детей. Дети вершины, в которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу (в левой части которого стоит этот нетерминал) и упорядочены так же, как в правой части этого правила. |
}} | }} | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Крона''' дерева разбора {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. | + | '''Крона''' дерева разбора {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево. |
}} | }} | ||
− | + | <br> | |
− | + | Построим дерево разбора скобочной последовательности из примера.<br> | |
− | [[Файл: | + | [[Файл:ParsingTree.png|350px]] |
+ | |||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
Строка 59: | Строка 62: | ||
|id=lemma- | |id=lemma- | ||
|statement= | |statement= | ||
− | Пусть <tex>\Gamma</tex> {{---}} однозначная грамматика. Тогда <tex>\forall \omega \in \mathbb{L}(\Gamma)</tex> существует ровно один левосторонний (правосторонний) вывод | + | Пусть <tex>\Gamma</tex> {{---}} однозначная грамматика. Тогда <tex>\forall \omega \in \mathbb{L}(\Gamma)</tex> существует ровно один левосторонний (правосторонний) вывод. |
|proof= | |proof= | ||
− | Очевидно, что по дереву разбора однозначно восстанавливается левосторонний вывод. Поскольку каждое слова из языка выводится только одним деревом разбора, то существует только один левосторонний вывод этого слова. | + | Очевидно, что по дереву разбора однозначно восстанавливается левосторонний(правосторонний) вывод. Поскольку каждое слова из языка выводится только одним деревом разбора, то существует только один левосторонний(правосторонний) вывод этого слова. |
}} | }} | ||
+ | |||
+ | ==См. также== | ||
+ | * [[Формальные грамматики]] | ||
+ | * [[Иерархия Хомского формальных грамматик]] | ||
+ | * [[Замкнутость КС-языков относительно различных операций]] | ||
== Литература == | == Литература == | ||
− | * | + | * [[wikipedia:Context-free grammar | Wikipedia {{---}} Context-free grammar]] |
+ | * [[wikipedia:ru:Контекстно-свободная грамматика | Википедия {{---}} Контекстно-свободная грамматика]] | ||
+ | * ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.) | ||
[[Категория: Теория формальных языков]] | [[Категория: Теория формальных языков]] | ||
[[Категория: Контекстно-свободные грамматики]] | [[Категория: Контекстно-свободные грамматики]] |
Версия 02:16, 25 ноября 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 (рус.)