Формальные грамматики — различия между версиями

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

Версия 02:47, 8 ноября 2011

Определение:
Нетерминал - элемент, представляющий некоторую сущность языка (например часть формулы) и не имеющий конкретного значения.


Определение:
Формальная грамматика - это способ описания формального языка, представляющий собой четверку
 [math]\Gamma =\langle \Sigma, N, S \in N, P \in 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]\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]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]