Формальные грамматики — различия между версиями
Filchenko (обсуждение | вклад) (Исправлены тире) |
Filchenko (обсуждение | вклад) (→Арифметические выражения: тире) |
||
Строка 47: | Строка 47: | ||
===Арифметические выражения=== | ===Арифметические выражения=== | ||
<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> | ||
− | # <tex>S \rightarrow S O S</tex> | + | # <tex>S \rightarrow S O S</tex> — два выражения, соединенные действием |
− | # <tex>S \rightarrow (S) </tex> | + | # <tex>S \rightarrow (S) </tex> — выражение, взятое в скобки |
− | # <tex>S \rightarrow 0</tex> | + | # <tex>S \rightarrow 0</tex> — ноль |
− | # <tex>S \rightarrow DN</tex> | + | # <tex>S \rightarrow DN</tex> — число, у которого первая цифра не ноль |
− | # <tex>O \rightarrow + | - | * | /</tex> | + | # <tex>O \rightarrow + | - | * | /</tex> — действие |
− | # <tex>D \rightarrow 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9</tex> | + | # <tex>D \rightarrow 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9</tex> — цифра, не являющаяся нулем |
− | # <tex>N \rightarrow NN | \epsilon</tex> | + | # <tex>N \rightarrow NN | \epsilon</tex> — любая последовательность из цифр, возможно пустая |
− | # <tex>N \rightarrow 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9</tex> | + | # <tex>N \rightarrow 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9</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> | Вывод строки <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>S \rightarrow SOS \rightarrow 2OS \rightarrow 2+S \rightarrow 2+SOS \rightarrow 2+2OS \rightarrow 2+2*S \rightarrow 2+2*2</tex> | Левосторонний вывод для такой же строки: <tex>S \rightarrow SOS \rightarrow 2OS \rightarrow 2+S \rightarrow 2+SOS \rightarrow 2+2OS \rightarrow 2+2*S \rightarrow 2+2*2</tex> |
Версия 05:09, 10 ноября 2011
Определение: |
Нетерминал — элемент, представляющий некоторую сущность языка (например часть формулы) и не имеющий конкретного значения. |
Определение: |
Формальная грамматика — способ описания формального языка, представляющий собой четверку алфавит, - набор нетерминалов, - начальный символ грамматики, - набор правил вывода | , где -
Определение: |
Терминал — элемент фалфавита |
Определение: |
| ( выводится из за один шаг):
Определение: |
Определение: |
Язык грамматики — все последовательности терминалов, которые можно получить из начального символа по правилам вывода. |
Примеры грамматик
Правильные скобочные последовательности
Вывод строки
:Арифметические выражения
- — два выражения, соединенные действием
- — выражение, взятое в скобки
- — ноль
- — число, у которого первая цифра не ноль
- — действие
- — цифра, не являющаяся нулем
- — любая последовательность из цифр, возможно пустая
- — любая цифра
Вывод строки
:Левосторонний вывод для такой же строки: