Usuario:Escaldon/Eliminación de producciones vacías

De Wikipedia, la enciclopedia libre

Una producción gramatical es vacía si es de la forma A. Modificaremos la gramática para eliminar este tipo de producciones sin cambiar el lenguaje generado por la gramática. Si L(G) no podremos eliminar todas las producciones vacías, de modo que en este caso dejaremos como única producción vacía: . Un símbolo se dice que es anulable si . El siguiente algoritmo permite el cálculo de todos los símbolos anulables de una gramática.

Algoritmo[editar]

H = ;
forall (Producción de la forma A ) do
    H = H  {A};
end
while (H cambie) do
    forall (Producción B donde ) do)
          H = H {B};
     end
end

Una vez calculado el conjunto de símbolos anulables, permite la eliminación de las producciones vacías de la gramática con el siguiente algoritmo:

Eliminar todas las producciones vacías (A )
forall (Producción de la forma A  V)) do
       Eliminar la producción A ;
       Añadir todas las producciones A ;
       Donde: si  es no anulable;
       ()() si  es anulable;
        no es (no se introducen producciones vacías);
end

Ejemplos[editar]

Apliquemos el algoritmo de elmininación de producciones vacías a la siguiente gramática:



El resultado que se obtiene es:



Se ha eliminado la única producción vacía: . Apliquémoslo a esta otra gramática:





El resultado que se obtiene es:






Referencias[editar]