Определение: |
Нетерминал - элемент, представляющий некоторую сущность языка (например часть формулы) и не имеющий конкретного значения. |
Определение: |
Формальная грамматика - это способ описания формального языка, представляющий собой четверку
[math]\Gamma =\langle \Sigma, N, S \in N, P \subset N^{+}\times (\Sigma\cup N)^{*}\rangle[/math], где [math]\Sigma[/math] - алфавит, [math]N[/math] - набор нетерминалов, [math]S[/math] - начальный символ грамматики, [math]P[/math] - набор правил вывода [math]\alpha\rightarrow \beta[/math] |
Определение: |
Терминал - элемент фалфавита [math]\Sigma[/math] |
Определение: |
[math]\alpha \Rightarrow \beta[/math] ([math]\beta[/math] выводится из [math]\alpha[/math] за один шаг):
- [math]\alpha=\alpha_1\alpha_2\alpha_3[/math]
- [math]\beta=\beta_1\beta_2\beta_3[/math]
- [math]\alpha_1=\beta1[/math], [math]\alpha_3=\beta3[/math], [math]\alpha_2\rightarrow\beta2 \in P[/math]
|
Определение: |
[math]\alpha \Rightarrow^* \beta[/math] ([math]\beta[/math] выводится из [math]\alpha[/math] за ноль или более шагов):
[math]\exists \gamma_1, \gamma_2,...,\gamma_n : \alpha \Rightarrow \gamma_1 \Rightarrow \gamma_2 \Rightarrow ... \Rightarrow \gamma_n \Rightarrow \beta[/math] |
Определение: |
Язык грамматики - все последовательности терминалов, которые можно получить из начального символа по правилам вывода. [math]L(\Gamma) = \{\omega|S \Rightarrow^{*}\omega, \omega \in \Sigma^{*}\}[/math] |
Примеры грамматик
Правильные скобочные последовательности
[math]\Sigma = \{(, )\}[/math]
- [math]S \rightarrow (S)[/math]
- [math]S \rightarrow SS[/math]
- [math]S \rightarrow \epsilon[/math]
Вывод строки [math](()())[/math]:
[math]S\rightarrow(S)\rightarrow(SS)\rightarrow((S)S)\rightarrow((S)(S))\rightarrow(()(S))\rightarrow(()())[/math]
Арифметические выражения
[math]\Sigma = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, +, *, /, -, (, )}[/math]
[math]S \rightarrow S O S[/math]
[math]S \rightarrow (S) [/math]
[math]O \rightarrow + | - | * | /[/math]
[math]S \rightarrow (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) N[/math]
[math]S \rightarrow 0[/math]
[math]N \rightarrow NN[/math]
[math]N \rightarrow \epsilon[/math]
[math]N \rightarrow 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0[/math]