You are on page 1of 3

Algoritmo para eliminar la recursividad izquierda indirecta: Se toma cada grupo de reglas de la forma:

A B1/ B2// Bn/..1/.p


B A1/ A2/./ Aq/1// r
Se reemplaza A por la parte derecha de sus reglas quedando:
B Bjj/k jj/ 1// r

para cada i, j=1,,q con i=1,,n, y para cada k, j= 1,,q con k=1,p

Luego se elimina la recursividad a izquierda directa.


Para ello, se toma cada grupo de reglas del no terminal A que sea recursiva por izquierda y que se escriban de la
forma:
AA1/ A2//Ap/.1/.q; donde las primeras p alternativas son recursivas y las q restantes no lo son.
Se aade a la gramtica un nuevo no terminal A, y todas las reglas A anteriores se sustituyen por las siguientes:
Aj

A jA,

1 i q

Aj

AjA,

1 j p

Algoritmo para vacuidad de lenguaje:


Begin
VI=;
N={A/ (At) de P y se cumple que t VT*}// A deriva en un terminal
while N < > VI
Do begin
VI=N; // copiar N en VI
N=VI {B/ (B)de P y (VT VI)}// Buscar los lados derechos que derivan en
terminales ms los smbolos de VI, incluir en N los lados izquierdos de las reglas que
cumplan la restriccin.
end;
if S N then VACIO = NO, else VACIO = SI
end

Algoritmo para supresin de smbolos intiles:

Parte A Determinar si X es terminable


Begin
VI=;
N={A/ (At) de P y se cumple que t VT*}// A deriva en un terminal
while N < > VI
Do begin
VI=N; // copiar N en VI
N=VI {B/ (B)de P y (VT VI)}// Buscar los lados
derechos que derivan en terminales ms los smbolos de VI, incluir
en N los lados izquierdos de las reglas que cumplan la restriccin.
end;
VN=N;
End
Parte B Determinar si X es accesible
Begin
VI= {S}
N= VI {X/ (SX) de P} // todo en lo que deriva S, pero que est en el conjunto
restringido.
while N < > VI
Do begin
VI=N; // copiar N en VI
N=VI { Y/ (SY) de P y A est en VI}// Buscar los lados
derechos que derivan en terminales ms los smbolos de VI, incluir
en N los lados izquierdos de las reglas que cumplan la restriccin.
end;

Eliminar reglas unitarias:

Eliminacin de reglas borradoras:


Begin

VI= ;
N={A/ (A) de P}// A es anulable
while N < > VI
Do begin
VI=N; // copiar N en VI
N=VI {B/ B y todos los smbolos de son anulables}
end;
VN=N;

End
Se forma un conjunto de reglas P, de la siguiente manera:
Si A X1X2Xn es una produccin de P, entonces agregar la produccin A 0 1n a P,
donde:
a) Si Xi no es anulable, entonces i = Xi
b) Si Xi es anulable, entonces i = Xi i =
c) No aadir la regla A, que ocurrira si todos los i son .
Para eliminar las reglas unitarias, primero se deben eliminar las reglas borradoras y los
smbolos intiles, y luego aplicar el siguiente algoritmo:
Begin

VI= ;
N=A
while N < > VI
Do begin
VI=N;
N=VI {C/ (BC) en P y B est en VI}
end;
NA=N;

End
Se determinan los conjuntos NA para cada AVN tal que AB. El conjunto P se construye
como sigue:Si AB y B (y no es regla unitaria), poner A en P.

You might also like