Формальные грамматики — различия между версиями
Kirelagin (обсуждение | вклад) (→Определения: В правилах слева могут быть и терминалы) |
м (rollbackEdits.php mass rollback) |
||
| (не показаны 2 промежуточные версии 2 участников) | |||
| Строка 94: | Строка 94: | ||
Вывод строки <tex>000111222</tex> : | Вывод строки <tex>000111222</tex> : | ||
| − | <tex>S \Rightarrow 0T\boldsymbol{S} 2 \Rightarrow 0T0T\boldsymbol{S}22 \Rightarrow | + | <tex>S \Rightarrow 0T\boldsymbol{S} 2 \Rightarrow 0T0T\boldsymbol{S}22 \Rightarrow 0T0\boldsymbol{T0}1222 \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> раз последнее правило и в результате получаем искомую строку. | Данная грамматика описывает этот язык, так как мы можем вывести любую строку одним методом. <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> раз последнее правило и в результате получаем искомую строку. | ||
Текущая версия на 19:27, 4 сентября 2022
Определения
| Определение: |
| Формальная грамматика (англ. Formal grammar) — способ описания формального языка, представляющий собой четверку
, где:
|
| Определение: |
выводится из за один шаг :
|
| Определение: |
| выводится из за ноль или более шагов : ( Рефлексивно-транзитивное замыкание отношения ). |
| Определение: |
| Языком грамматики (англ. Language of grammar) называется . |
| Определение: |
| Сентенциальная форма (англ. Sentential form) — последовательность терминалов и нетерминалов, выводимых из начального символа. |
Обозначения
- Нетерминалы обозначаются заглавными буквами латинского алфавита (например: ).
- Терминалы обозначаются строчными буквами из начала латинского алфавита (например: ).
- Последовательности из терминалов (слова) обозначают строчными буквами из конца латинского или греческого алфавита (например: ).
- Последовательности из терминалов и нетерминалов обозначаются строчными буквами из начала греческого алфавита (например: ).
Примеры грамматик
Правильные скобочные последовательности
Вывод строки :
.
Вывод строки :
.
Арифметические выражения
Вывод строки : .
Левосторонний вывод этой же строки: .
Язык
Данный язык является контекстно-зависимым. КЗ-грамматика для языка приведена ниже, а через лемму о разрастании доказывается его неконтекстно-свободность.
Вывод строки :
Данная грамматика описывает этот язык, так как мы можем вывести любую строку одним методом. раз выполняем правило вывода . Потом выполняем правило , раз выполняем . После этого у нас получается строка . Выполняем раз последнее правило и в результате получаем искомую строку.
См. также
Источники информации
- Wikipedia — Formal grammar
- Wikipedia — Formal language
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)