Формальные грамматики — различия между версиями
Filchenko (обсуждение | вклад) (→Определения: вынес обозначения, добавил забытое) |
Filchenko (обсуждение | вклад) (еще несколько правок) |
||
Строка 32: | Строка 32: | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | '''Язык грамматики''' — все последовательности терминалов, которые можно получить из начального символа по правилам вывода. <tex>L(\Gamma) = \{\omega|S \Rightarrow^{*}\omega | + | '''Язык грамматики''' — все последовательности терминалов, которые можно получить из начального символа по правилам вывода. <tex>L(\Gamma) = \{\omega \in \Sigma^{*}|S \Rightarrow^{*}\omega\}</tex>. |
}} | }} | ||
Строка 44: | Строка 44: | ||
==Правильные скобочные последовательности== | ==Правильные скобочные последовательности== | ||
<tex>\Sigma = \{(, )\}</tex> | <tex>\Sigma = \{(, )\}</tex> | ||
− | + | <br/> | |
− | + | <tex>\begin{array}{lcr} | |
− | + | S \rightarrow (S)\\ | |
− | + | S \rightarrow SS\\ | |
+ | S \rightarrow \epsilon | ||
+ | \end{array} | ||
+ | </tex><br/> | ||
Вывод строки <tex>(()())</tex>: | Вывод строки <tex>(()())</tex>: | ||
Строка 54: | Строка 57: | ||
==Арифметические выражения== | ==Арифметические выражения== | ||
<tex>\Sigma = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, +, *, /, -, (, )\}</tex> | <tex>\Sigma = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, +, *, /, -, (, )\}</tex> | ||
− | + | <br/> | |
− | + | ||
− | + | <tex>\begin{array}{lcr} | |
− | + | S \rightarrow S O S\\ | |
− | + | S \rightarrow (S)\\ | |
− | + | S \rightarrow 0\\ | |
− | + | S \rightarrow DN\\ | |
− | + | O \rightarrow + | - | * | /\\ | |
+ | D \rightarrow 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9\\ | ||
+ | N \rightarrow NN | \epsilon\\ | ||
+ | N \rightarrow 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ||
+ | \end{array} | ||
+ | </tex><br/> | ||
Вывод строки <tex>2+2*2</tex>: <tex>S \rightarrow SOS \rightarrow SOSOS \rightarrow 2OSOS \rightarrow 2O2OS \rightarrow 2O2O2 \rightarrow 2+2O2 \rightarrow 2+2*2</tex> | Вывод строки <tex>2+2*2</tex>: <tex>S \rightarrow SOS \rightarrow SOSOS \rightarrow 2OSOS \rightarrow 2O2OS \rightarrow 2O2O2 \rightarrow 2+2O2 \rightarrow 2+2*2</tex> |
Версия 06:35, 10 ноября 2011
Содержание
Определения
Определение: |
Нетерминал — элемент, представляющий некоторую сущность языка (например, часть формулы) и не имеющий конкретного значения. |
Определение: |
Терминал — элемент алфавита . |
Определение: |
Формальная грамматика — способ описания формального языка, представляющий собой четверку алфавит, — набор нетерминалов, — начальный символ грамматики, — набор правил вывода | , где —
Определение: |
| ( выводится из за один шаг):
Определение: |
Определение: |
Язык грамматики — все последовательности терминалов, которые можно получить из начального символа по правилам вывода. | .
Обозначения
- Нетерминалы обозначаются заглавными буквами латинского алфавита.
- Терминалы обозначаются строчными буквами из начала латинского алфавита.
- Последовательности из терминалов (слова) обозначают строчными буквами из конца латинского алфавита.
- Последовательности из терминалов и нетерминалов обозначаются строчными буквами греческого алфавита.
Примеры грамматик
Правильные скобочные последовательности
Вывод строки
:Арифметические выражения
Вывод строки
:Левосторонний вывод для такой же строки:
Литература
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)