Está en la página 1de 2

Eliminación de la recursividad por la izquierda

Una gramática es recursiva por la izquierda si tiene un no terminal A tal que existe una
derivación A ⇒+ Aα para alguna cadena α .

Hasta ahora habíamos visto la eliminación de la recursividad simple por la izquierda,


donde había una producción A → Aα . Para la realización de esta eliminación, se
realizaba la sustitución de las producciones
A → Aα β por
A → βA′
A′ → α A′ λ

O más genéricamente, independientemente del número de producciones de A que


existan mediante los siguientes pasos:
1. Agrupación de las producciones de A en la forma
A → Aα 1 Aα 2 K Aα m β 1 β 2 K β n
donde ninguna β i comienza con una A.
2. Después se sustituyen las producciones de A por
A → β1 A1′ β 2 A′ K β n A′
A′ → α 1 A′ α 2 A′ K α m A′ λ

El algoritmo que veremos ahora, eliminará sistemáticamente la recursividad por la


izquierda de gramáticas que no tengan ciclos ( A ⇒+ A ) o producciones λ ( A → λ ).
Algoritmo de eliminación de la recursividad por la izquierda
Entrada. La gramática G sin ciclos ni producciones λ
Salida. Una gramática equivalente sin recursividad por la izquierda
1.- Ordenar los no terminales en un orden cualquiera y denominarlos A1 , A2 , K An
2.- For (i=1; i<=n; i++) do
a) Si hay una regla de la forma Ai → A j α donde j < i entonces queremos
eliminarla. Así con producciones A j de la forma A j → β1 β 2 K β k , habrá
que reemplazar la regla de producción Ai → A j α por la regla
Ai → β 1α β 2α K β k α
b) Eliminar cualquier recursividad inmediata por la izquierda entre las
producciones Ai .

Método. Aplíquese el algoritmo anterior a la gramática G.

Ejemplo de aplicación
Sea la gramática

S → Aa b
A → Ac Sd λ

El no terminal S es recursivo por la izquierda porque S ⇒ Aa ⇒ Sda , aunque no es


recursivo inmediato (en un solo paso) por la izquierda.

Para aplicar el algoritmo, se ordenan los no terminales S, A. (S será A1 y A será A2 ).


Ahora, en el paso 2, vemos que hay una producción que cumple el criterio para que
queramos eliminarla (regla de la forma Ai → A j α donde j < i ). En este caso es la regla
A → Sd . Aplicando la sustitución indicada, reemplazamos las apariciones de S por sus
producciones, obteniendo las siguientes producciones de A:
A → Ac Aad bd λ

Eliminando la recursividad directa por la izquierda entre las producciones de A, se


obtiene la siguiente gramática

S → Aa b
A → bdA′ A′
A′ → cA′ adA′ λ

También podría gustarte