Формальные грамматики — различия между версиями
 (→Язык 0^n1^n2^n)  | 
				 (→Язык 0^n1^n2^n)  | 
				||
| Строка 92: | Строка 92: | ||
<tex>S \Rightarrow 0T\boldsymbol{S} 2 \Rightarrow 0T0T\boldsymbol{S}22 \Rightarrow 0T\boldsymbol{0T}01222 \Rightarrow  0\boldsymbol{T0}0T1222 \Rightarrow 00\boldsymbol{T0}T1222 \Rightarrow 000T\boldsymbol{T1}222 \Rightarrow 000\boldsymbol{T1}1222 \Rightarrow 000111222</tex>  | <tex>S \Rightarrow 0T\boldsymbol{S} 2 \Rightarrow 0T0T\boldsymbol{S}22 \Rightarrow 0T\boldsymbol{0T}01222 \Rightarrow  0\boldsymbol{T0}0T1222 \Rightarrow 00\boldsymbol{T0}T1222 \Rightarrow 000T\boldsymbol{T1}222 \Rightarrow 000\boldsymbol{T1}1222 \Rightarrow 000111222</tex>  | ||
| − | + | Данная грамматика описывает этот язык, так как мы можем вывести любую строку одним методом. <tex>n-1</tex> раз выполняем правило вывода <tex>S \rightarrow 0TS2 </tex>. Потом выполняем правило <tex>S \rightarrow 012 </tex>,  <tex>n-1</tex> раз выполняем <tex>T0 \rightarrow 0T </tex>. После этого у нас получается строка <tex>0^nT^{n-1}2^n</tex>. Выполняем <tex>n-1</tex> раз последнее правило и в результате получаем искомую строку.  | |
== См. также ==  | == См. также ==  | ||
Версия 20:50, 11 октября 2016
Содержание
Определения
| Определение: | 
| Формальная грамматика (англ. Formal grammar) — способ описания формального языка, представляющий собой четверку , где — алфавит, элементы которого называют терминалами (англ. terminals), — множество, элементы которого называют нетерминалами (англ. nonterminals), — начальный символ грамматики (англ. start symbol), — набор правил вывода (англ. production rules или productions) . | 
| Определение: | 
 выводится из  за один шаг :
  | 
| Определение: | 
| выводится из за ноль или более шагов : ( Рефлексивно-транзитивное замыкание отношения ). | 
| Определение: | 
| Языком грамматики (англ. Language of grammar) называется . | 
| Определение: | 
| Сентенциальная форма (англ. Sentential form) — последовательность терминалов и нетерминалов, выводимых из начального символа. | 
Обозначения
- Нетерминалы обозначаются заглавными буквами латинского алфавита.
 - Терминалы обозначаются строчными буквами из начала латинского алфавита.
 -  Последовательности из терминалов (слова) обозначают строчными буквами из конца латинского или греческого алфавита.
 - Последовательности из терминалов и нетерминалов обозначаются строчными буквами из начала греческого алфавита.
 
Примеры грамматик
Правильные скобочные последовательности
Вывод строки :
.
Вывод строки :
.
Арифметические выражения
Вывод строки : .
Левосторонний вывод этой же строки: .
Язык
Данный язык является контекстно-зависимым. КЗ-грамматика для языка приведена ниже, а через лемму о разрастании доказывается его неконтекстно-свободность.
Вывод строки :
Данная грамматика описывает этот язык, так как мы можем вывести любую строку одним методом. раз выполняем правило вывода . Потом выполняем правило , раз выполняем . После этого у нас получается строка . Выполняем раз последнее правило и в результате получаем искомую строку.
См. также
- Возможность порождения формальной грамматикой произвольного перечислимого языка
 - Иерархия Хомского формальных грамматик
 - Неукорачивающие и контекстно-зависимые грамматики, эквивалентность
 - Правоконтекстные грамматики, эквивалентность автоматам
 
Источники информации
- Wikipedia — Formal grammar
 - Wikipedia — Formal language
 - Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)