Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора — различия между версиями
Haliullin (обсуждение | вклад) м |
Haliullin (обсуждение | вклад) м |
||
Строка 8: | Строка 8: | ||
'''Выводом слова''' <tex>\alpha</tex> называется последовательность строк, состоящих из терминалов и нетерминалов, где первой идет строка, состоящая из одного стартового нетерминала, а каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, и последней строкой в последовательности является слово <tex>\alpha</tex>. | '''Выводом слова''' <tex>\alpha</tex> называется последовательность строк, состоящих из терминалов и нетерминалов, где первой идет строка, состоящая из одного стартового нетерминала, а каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, и последней строкой в последовательности является слово <tex>\alpha</tex>. | ||
}} | }} | ||
+ | |||
+ | Рассмотрим на примере грамматики, выводящей все правильные скобочные последовательности. Терминальные символы "(" и ")", нетерминал <tex>S</tex>, он же стартовый нетерминал, правила:<br> | ||
+ | <tex>S\rightarrow (S)S</tex><br> | ||
+ | <tex>S\rightarrow S(S)</tex><br> | ||
+ | <tex>S\rightarrow \varepsilon</tex><br> | ||
+ | Выведем слово "(()(()))()":<br> | ||
+ | <tex>\boldsymbol{S}\rightarrow (S)\boldsymbol{S} \rightarrow (S)(\boldsymbol{S})S\rightarrow(S)()\boldsymbol{S}\rightarrow(\boldsymbol{S})()\rightarrow(\boldsymbol{S}(S))()\rightarrow(S(S)(\boldsymbol{S}))()\rightarrow(S(S)(\boldsymbol{S}(S)))()\rightarrow (S(\boldsymbol{S})((S)))()\rightarrow(\boldsymbol{S}()((S)))()\rightarrow(()((\boldsymbol{S})))()\rightarrow(()(()))()</tex> | ||
{{Определение | {{Определение | ||
Строка 14: | Строка 21: | ||
}} | }} | ||
Аналогичным образом определяется ''правосторонний вывод''. | Аналогичным образом определяется ''правосторонний вывод''. | ||
+ | <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> | ||
+ | |||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
Строка 22: | Строка 33: | ||
'''Кроной''' дерева разбора называется множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева из в глубину корня. | '''Кроной''' дерева разбора называется множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева из в глубину корня. | ||
}} | }} | ||
− | Крона дерева разбора представляет из себя слово языка, которое выводит это дерево. | + | Крона дерева разбора представляет из себя слово языка, которое выводит это дерево.<br> |
− | + | Рассмотрим, как будет выглядеть дерево разбора нашей скобочной последовательности.<br> | |
+ | [[Файл:[[Файл:Example.jpg]]]] | ||
{{Определение | {{Определение | ||
|definition= | |definition= |
Версия 01:03, 15 октября 2010
Определение: |
Контекстно-свободной грамматикой называется грамматика, у которой в левых частях всех правил стоят только одиночные нетерминалы. |
Язык, задаваемый контекстно-свободной грамматикой называется контекстно-свободным языком.
Определение: |
Выводом слова | называется последовательность строк, состоящих из терминалов и нетерминалов, где первой идет строка, состоящая из одного стартового нетерминала, а каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, и последней строкой в последовательности является слово .
Рассмотрим на примере грамматики, выводящей все правильные скобочные последовательности. Терминальные символы "(" и ")", нетерминал , он же стартовый нетерминал, правила:
Выведем слово "(()(()))()":
Определение: |
Левосторонним выводом слова | называется его вывод такой, что каждая последующая строка получена из предыдущей путем замены самого левого встречающегося в строке нетерминала по одному из правил.
Аналогичным образом определяется правосторонний вывод.
Рассмотрим левосторонний вывод нашей скобочной последовательности:
Определение: |
Деревом разбора называется дерево, на вершинах которого записаны терминалы или нетерминалы, а дети вершины, на которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу, в левой части которого стоит этот нетерминал, и упорядочены так же, как в правой части этого правила. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами имеют детей. |
Определение: |
Кроной дерева разбора называется множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева из в глубину корня. |
Крона дерева разбора представляет из себя слово языка, которое выводит это дерево.
Рассмотрим, как будет выглядеть дерево разбора нашей скобочной последовательности.
[[Файл:]]
Определение: |
Грамматика называется однозначной, если у каждого слова имеется не более одного дерева разбора в этой грамматкие. |
Утверждение: |
Пусть - однозначная грамматика. Тогда у существует ровно один левосторонний (правосторонний) вывод. |
Очевидно, что по дереву разбора однозначно восстанавливается левосторонний вывод. Поскольку каждое слова из языка выводится только одним деревом разбора, то и левосторонний вывод, выводящий это слово, существует только один |