Совпадение множества языков МП-автоматов и контекстно-свободных языков — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Эквивалентность МП-автоматов и КС-языков)
(Построение МП-автомата по заданной КС-грамматике)
Строка 3: Строка 3:
 
Далее будут приведены конструкции для построения МП-автомата по заданной КС-грамматике, и наоборот. Также будут приведены теоремы об эквивалентности языков.
 
Далее будут приведены конструкции для построения МП-автомата по заданной КС-грамматике, и наоборот. Также будут приведены теоремы об эквивалентности языков.
 
=== Построение МП-автомата по заданной КС-грамматике ===
 
=== Построение МП-автомата по заданной КС-грамматике ===
{{Определение
+
Пусть <tex> G=(V,T,Q,S) </tex> — КС-грамматика. Построим МП-автомат <tex> P=(\{q\},T,V \cup T, \delta ,q,S) </tex>, который допускает <tex> L(G) </tex> по пустому магазину. Функция переходов <tex> \delta </tex> будет определена по следующим правилам:
|definition= Пусть <tex> G=(V,T,Q,S) </tex> — КС-грамматика. Построим МП-автомат <tex> P=(\{q\},T,V \cup T, \delta ,q,S) </tex>, который допускает <tex> L(G) </tex> по пустому магазину. Функция переходов <tex> \delta </tex> будет определена по следующим правилам:
 
 
*1. <tex> \delta(q,\epsilon,A)=\{(q,\beta )| A \rightarrow \beta</tex> — продукция <tex> G \} </tex> — для каждой переменной <tex> A </tex>.  
 
*1. <tex> \delta(q,\epsilon,A)=\{(q,\beta )| A \rightarrow \beta</tex> — продукция <tex> G \} </tex> — для каждой переменной <tex> A </tex>.  
 
*2. <tex> \delta(q,a,a)=\{(q,\epsilon)\} </tex> для каждого терминала <tex> a </tex>.
 
*2. <tex> \delta(q,a,a)=\{(q,\epsilon)\} </tex> для каждого терминала <tex> a </tex>.
}}
+
 
==== Пример. ====
+
==== Пример ====
 
Преобразуем грамматику выражений в МП-автомат. Пусть дана грамматика:
 
Преобразуем грамматику выражений в МП-автомат. Пусть дана грамматика:
 
*<tex> I \rightarrow a|b|I1|I0|Ia|Ib </tex>
 
*<tex> I \rightarrow a|b|I1|I0|Ia|Ib </tex>
Строка 15: Строка 14:
 
*a) <tex> \delta(q,\epsilon,I)={(q,a), (q,b), (q,Ia), (q,Ib), (q,I0), (q,I1)};</tex>
 
*a) <tex> \delta(q,\epsilon,I)={(q,a), (q,b), (q,Ia), (q,Ib), (q,I0), (q,I1)};</tex>
 
*b) <tex> \delta(q,\epsilon,E)={(q,I), (q,E+E), (q,E*E), (q,(E))};</tex>
 
*b) <tex> \delta(q,\epsilon,E)={(q,I), (q,E+E), (q,E*E), (q,(E))};</tex>
*c) <tex> \delta(q,a,a)=\{(q,\epsilon)\}</tex>;<tex> \delta(q,b,b)=\{(q,\epsilon)\}</tex>;<tex> \delta(q,1,1)=\{(q,\epsilon)\}</tex>;<tex> \delta(q,0,0)=\{(q,\epsilon)\}</tex>;<tex> \delta(q,),))=\{(q,\epsilon)\}</tex>;<tex> \delta(q,(,()=\{(q,\epsilon)\}</tex>;<tex> \delta(q,+,+)=\{(q,\epsilon)\}</tex>;<tex> \delta(q,*,*)=\{(q,\epsilon)\}</tex>;
+
*c) <tex> \delta(q,a,a)=\{(q,\epsilon)\}</tex>; <tex> \delta(q,b,b)=\{(q,\epsilon)\}</tex>;...<tex> \delta(q,*,*)=\{(q,\epsilon)\}</tex>; если входной символ совпадает с вершиной стека, то вершина удаляется.
 
Пункты a,b образованы по первому правилу построения функции переходов, пункт c по второму правилу.
 
Пункты a,b образованы по первому правилу построения функции переходов, пункт c по второму правилу.
 +
==== Корректность построения ====
 +
Пусть <tex> w\in L(G)</tex>, тогда <tex> w </tex> имеет следующее левое порождение:
 +
<tex> S = \gamma_1 \Rightarrow \gamma_2 \Rightarrow ... \Rightarrow \gamma_n=w</tex>.
 +
Покажем индукцией по <tex> i </tex>, что <tex> (q,w,S)\vdash^*(q,y_i,\alpha_i)</tex>:
 +
*База. Очевидно, что <tex> (q,w,S)\vdash^*(q,w,S) </tex>
 +
*Переход. Предположим, что <tex> (q,w,S)\vdash^*(q,w_i,\alpha_i) </tex>. Заметим, что шаг порождения <tex> y_i \Rightarrow y_{i+1}</tex> включает замену некоторой переменной <tex> A </tex> ее продукцией <tex> \beta </tex>. Правило 1 построения МП-автомата позволяет на заменить <tex> A </tex> на вершине стека на цепочку <tex> \beta </tex>, а правило 2 позволяет затем сравнить любые терминалы на вершине со входными символами. В результате достигается МО <tex> (q,y_{i+1},\alpha_{i+1}) </tex>.
 +
*Также заметим, что <tex> \alpha_n = \epsilon</tex>. Таким образом <tex> (q,w,S)\vdash^*(q,\epsilon,\epsilon) </tex>, т.е допускает <tex> P </tex> по пустому стеку.
 
{{Теорема
 
{{Теорема
 
|about= О совпадении КС-языков и множества языков МП-автомата
 
|about= О совпадении КС-языков и множества языков МП-автомата
|statement= Если МП-автомат <tex> P </tex> построен по грамматике <tex> G </tex> по указанной выше конструкции, то <tex> N(P)=L(G) </tex>
+
|statement= Если МП-автомат <tex> P </tex> построен по грамматике <tex> G </tex> по указанной выше конструкции, то <tex> N(P) \geq L(G) </tex>
 +
|proof= Очевидно из того, что мы доказали корректность построения.
 
}}
 
}}

Версия 02:49, 15 января 2011

Эта статья находится в разработке!

Эквивалентность МП-автоматов и КС-языков

Далее будут приведены конструкции для построения МП-автомата по заданной КС-грамматике, и наоборот. Также будут приведены теоремы об эквивалентности языков.

Построение МП-автомата по заданной КС-грамматике

Пусть [math] G=(V,T,Q,S) [/math] — КС-грамматика. Построим МП-автомат [math] P=(\{q\},T,V \cup T, \delta ,q,S) [/math], который допускает [math] L(G) [/math] по пустому магазину. Функция переходов [math] \delta [/math] будет определена по следующим правилам:

  • 1. [math] \delta(q,\epsilon,A)=\{(q,\beta )| A \rightarrow \beta[/math] — продукция [math] G \} [/math] — для каждой переменной [math] A [/math].
  • 2. [math] \delta(q,a,a)=\{(q,\epsilon)\} [/math] для каждого терминала [math] a [/math].

Пример

Преобразуем грамматику выражений в МП-автомат. Пусть дана грамматика:

  • [math] I \rightarrow a|b|I1|I0|Ia|Ib [/math]
  • [math] E \rightarrow I|E*E|E+E|(E) [/math]

Множеством входных символов является [math] \{a,b,1,0,(,),+,*\} [/math]. Эти символы, вместе с переменными [math] I,E [/math], образуют магазинный алфавит. Функция переходов определена следующим образом:

  • a) [math] \delta(q,\epsilon,I)={(q,a), (q,b), (q,Ia), (q,Ib), (q,I0), (q,I1)};[/math]
  • b) [math] \delta(q,\epsilon,E)={(q,I), (q,E+E), (q,E*E), (q,(E))};[/math]
  • c) [math] \delta(q,a,a)=\{(q,\epsilon)\}[/math]; [math] \delta(q,b,b)=\{(q,\epsilon)\}[/math];...[math] \delta(q,*,*)=\{(q,\epsilon)\}[/math]; если входной символ совпадает с вершиной стека, то вершина удаляется.

Пункты a,b образованы по первому правилу построения функции переходов, пункт c по второму правилу.

Корректность построения

Пусть [math] w\in L(G)[/math], тогда [math] w [/math] имеет следующее левое порождение: [math] S = \gamma_1 \Rightarrow \gamma_2 \Rightarrow ... \Rightarrow \gamma_n=w[/math]. Покажем индукцией по [math] i [/math], что [math] (q,w,S)\vdash^*(q,y_i,\alpha_i)[/math]:

  • База. Очевидно, что [math] (q,w,S)\vdash^*(q,w,S) [/math]
  • Переход. Предположим, что [math] (q,w,S)\vdash^*(q,w_i,\alpha_i) [/math]. Заметим, что шаг порождения [math] y_i \Rightarrow y_{i+1}[/math] включает замену некоторой переменной [math] A [/math] ее продукцией [math] \beta [/math]. Правило 1 построения МП-автомата позволяет на заменить [math] A [/math] на вершине стека на цепочку [math] \beta [/math], а правило 2 позволяет затем сравнить любые терминалы на вершине со входными символами. В результате достигается МО [math] (q,y_{i+1},\alpha_{i+1}) [/math].
  • Также заметим, что [math] \alpha_n = \epsilon[/math]. Таким образом [math] (q,w,S)\vdash^*(q,\epsilon,\epsilon) [/math], т.е допускает [math] P [/math] по пустому стеку.
Теорема (О совпадении КС-языков и множества языков МП-автомата):
Если МП-автомат [math] P [/math] построен по грамматике [math] G [/math] по указанной выше конструкции, то [math] N(P) \geq L(G) [/math]
Доказательство:
[math]\triangleright[/math]
Очевидно из того, что мы доказали корректность построения.
[math]\triangleleft[/math]