next up previous contents
Siguiente: Autómatas finitos con pila Subir: Autómatas finitos con pila Anterior: Equivalencia entre AFPNDs aceptando   Índice General

Equivalencia entre AFPNDs y gramáticas libres de contexto

Para cada gramática libre de contexto $G$ existe un autómata finito con pila no-determinista $M$ que acepta el mismo lenguaje, es decir, $L(M)=L(G)$.

La comprobación es constructiva.

Sea $G=(\Sigma_T,\Sigma_N,P,\$)$ una gramática libre de contexto.

Podemos convertir la gramática en su forma normal de Greibach (FNG), es decir todas las producciones son del tipo: $A\longrightarrow \sigma\Upsilon$ con $\sigma\in\Sigma_T$ y $\Upsilon\in\Sigma_N^*$ o la producción es $\$\longrightarrow \epsilon$ si $\epsilon\in L(G)$.

Construimos un AFPND $M=(\Sigma_T,\Sigma_N,\{q\},\delta,q,\$,\emptyset)$, (es decir, con un sólo estado) que acepta con pila vacía, donde

\begin{displaymath}(q,\Upsilon)\in\delta(q,\sigma,A)\end{displaymath}

siempre que $A\longrightarrow \sigma\Upsilon$ sea una producción en $P$ y

\begin{displaymath}(q,\$)\in\delta(q,\epsilon,\epsilon)\end{displaymath}

siempre que $\$\longrightarrow \epsilon$ sea una producción en $P$.

Entonces, el autómata simula en un cálculo la aplicación de las reglas de la gramática siempre siguiendo la derivación más a la izquierda para la palabra en cuestión.

Ejemplo:


\begin{displaymath}G=(\{a,b\},\{\$,A,B,C\},P,\$) \end{displaymath}

con

\begin{displaymath}P=\{\$\longrightarrow aBBC,A\longrightarrow aAA\vert b,B\longrightarrow bBAC\vert b,C\longrightarrow b\}\end{displaymath}

que ya está en forma formal de Greibach, entonces el AFPND es:

\begin{displaymath}M=(\{a,b\},\{\$,A,B,C\},\{q\},\delta,q,\$,\emptyset) \end{displaymath}

con

\begin{eqnarray*}
\delta(q,a,\$) &=& \{(q,BBC)\}\\
\delta(q,a,A) &=& \{(q,AA)\}...
...{(q,BAC),(q,\epsilon)\}\\
\delta(q,b,C) &=& \{(q,\epsilon)\}\\
\end{eqnarray*}

Para cada autómata finito con pila no-determinista $M$ existe una gramática libre de contexto $G$ que genera el mismo lenguaje, es decir, $L(G)=L(M)$.

La comprobación es constructiva.

Sea $M=(\Sigma,\Gamma,Q,\delta,q_0,c_0,F)$ un AFPND.

Si $F\not=\emptyset$ podemos convertir el autómata en un AFPND que acepte con pila vacía.

Luego podemos asumir que todas las transiciones del autómata como mucho apilan dos símbolos a la pila, porque podemos introducir estados intermedios que apilan poco a poco todos los símbolos necesarios sin leer más de la entrada, en concreto,

Entonces, asumimos que tengamos un AFPND que acepta con pila vacía y que apile en una transición como mucho dos símbolos a la vez.

Construimos una gramática libre de contexto $G=(\Sigma,\Sigma_N,P,\$)$, es decir, con los mismos símbolos de entrada, y donde

Entonces, la gramática simula un cálculo del autómata con una derivación más a la izquierda para la palabra en cuestión.

Formalmente hay que comprobar la equivalencia

\begin{displaymath}\$\longrightarrow ^*w\Longleftrightarrow (q_0,w,c_0)\shortmid\joinrel\relbar\joinrel\relbar ^*(q,\epsilon,\epsilon) \end{displaymath}

es decir, si existe una derivación también existe un cálculo y al revés.

La comprobación del lado izquierdo al lado derecho se realice mediante una inducción sobre la longitud de una derivación más a la izquierda y la otra dirección mediante una inducción sobre la longitud del cálculo. El caso inicial, es decir, se aplica solamente una regla o se calcula solamente una configuración siguiente, se verifica directamente a partir de la construcción.


next up previous contents
Siguiente: Autómatas finitos con pila Subir: Autómatas finitos con pila Anterior: Equivalencia entre AFPNDs aceptando   Índice General
© 2006, Dr. Arno Formella, Universidad de Vigo, Departamento de Informática