Está en la página 1de 19

Clase 16: GLCs recursivas y no factorizadas

Solicitado: Ejercicios 13: Recursividad y factorizacin de gramticas


M. en C. Edgardo Adrin Franco Martnez
http://computacion.cs.cinvestav.mx/~efranco
@efranco_escom

edfrancom@ipn.mx

Recursividad izquierda de una GLC


Eliminacin de la recursividad izquierda
Ejemplo (Eliminacin de la recursividad izquierda)
Indeterminismo en las producciones
Factorizacin de una gramtica
Ejemplo 1 (Factorizacin de una gramtica)
Ejemplo 2 (Factorizacin de una gramtica)

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Contenido

Ejercicios 13: Recursividad y factorizacin de


gramticas
2

Compiladores (Lenguajes y gramticas - Edgardo A. Franco)

Una gramtica libre de contexto recursiva por


izquierda da lugar a algunos problemas
computacionales a la hora de construir de manera
descendente un rbol de derivacin de una cadena,
pudiendo afectar a algoritmos descendentes que
caen en un bucle infinito de recursin.
S
S Sa

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Recursividad izquierda de una GLC

Una GLC es recursiva por la izquierda si tiene un noterminal A tal que existe una produccin:
A A.

1. Se agrupan todas las producciones de A en la


forma: A A 1|A 2| |A m| 1 |2| | n,
donde ninguna i comienza con una A.
2. Se sustituyen las producciones de A por:
A 1A| 2A||nA
A 1A|2A||mA|

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Eliminacin de la recursividad izquierda

Ejemplo: Eliminar la recursividad a izquierdas


de:
E E+T
ET
TF
F (E)
F id
T T*F

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Ejemplo (Eliminacin de la recursividad izquierda)

Se identifica si cada una de las producciones que


tienen la forma:
A A |
La produccin E E+T , tiene recursividad
izquierda, por lo que:
E E+T | T
A A |
Se igualan los smbolos segn la formula:
A=E
=+T
=T
Se utilizan las reglas de remplazo
A 1A| 2A||nA
A 1A|2A||mA|

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

E E+T
ET
TF
F (E)
F id
T T*F

E TE
E +TE|

A las produccines T T*F | F, tambin se le


aplica el mismo proceso :
A=T
= *F
=F
Se utilizan las reglas de remplazo
A 1A| 2A||nA
A 1A|2A||mA|
T FT
T *FT |

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

E E+T
ET
TF
F (E)
F id
T T*F

E TE
E +TE
E
T FT
T *FT
T
F (E)
F id

Se hace necesario eliminar las


producciones del tipo A para dejar
una gramtica bien formada.
E TE
E +TE
E T
E +T
T FT
T F
T *FT
T *F
F (E)
F id

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

La gramtica con la recursividad izquierda eliminada es:

Se hace necesario tambin eliminar las


reglas de redenominacin
E TE
E +TE
E (E)
E id
E +T
T FT
T (E)
T id
T *FT
T *F
F (T)
F id

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

E TE
E +TE
E T
E +T
T FT
T F
T *FT
T *F
F (E)
F id

E TE
E +TE
E (E)
E id
E +T
T FT
T (E)
T id
T *FT
T *F
F (T)
F id

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Finalmente la gramtica no recursiva por izquierda


es:

10

Problemas de indeterminismo cuando varias


alternativas en una misma produccin comparten el
mismo prefijo, ya que un algoritmo computacional
no sabra cul elegir de manera inmediata.
Tendr que probar una produccin y si se produce un
error hara backtracking.
"Existen transformaciones de gramticas para la eliminacin del
indeterminismo. Estas transformaciones no modifican el
lenguaje que se est reconociendo, pero si que cambian el
aspecto de la gramtica, que es en general menos intuitiva".

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Indeterminismo en las alternativas

11

<Sentencia> ::= if <Expresion> then <Sentencia> else <Sentencia>


<Sentencia> ::= if <Expresion> then <Sentencia>
<Sentencia> ::= otras

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Cuando dos alternativas para un no-terminal


empiezan igual, no se sabe qu alternativa
expandir. P.g.:

Si en la entrada tenemos el if no se sabe cual de las


dos alternativas elegir para expandir . La idea es
reescribir la produccin para retrasar la decisin
hasta haber visto de la entrada lo suficiente para
poder elegir la opcin correcta.
12

1. Para cada no terminal A buscar el prefijo mas


largo comn a dos o ms alternativas de A () y
se agrupan en la forma: A 1|2||n|
donde representa todas las alternativas de A que
no comienzan por .

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Factorizacin izquierda de una gramtica

2. Se sustituyen las producciones de A por:


A A|
A 1|2| |n
13

Ejemplo: Factorizar la siguiente gramtica


<Sentencia> ::= if <Expresion> then <Sentencia> else <Sentencia>
1

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Ejemplo 1 (Factorizacin de una gramtica)

<Sentencia> ::= if <Expresion> then <Sentencia>

<Sentencia> ::= otras

14

A A|
A 1|2| |n
<Sentencia> ::= if <Expresion> then <Sentencia> | otras

<Sentencia>::= else <Sentencia> |


1

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Realizando el remplazo

15

<Sentencia> ::= if <Expresion> then <Sentencia> | otras


<Sentencia>::= else <Sentencia> |

Eliminar la regla no generativa vuelve a generar


indeterminismo.

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Al factorizar no es conveniente eliminar reglas no


generativas:

<Sentencia> ::= if <Expresion> then <Sentencia> | otras


<Sentencia> ::= if <Expresion> then
<Sentencia>::= else <Sentencia>
16

Factorizar la siguiente gramtica:


P iEtPabe
P iEtPeP
P a
P Eab
E b

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Ejemplo 2 (Factorizacin de una gramtica)

17

P iEtPabe| iEtPeP|a|Eab
E b
Se factoriza de la siguiente manera:
P iEtP (abe|eP)|a|Eab
P abe|eP
E b

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Factorizar la siguiente gramtica:

As que la gramtica queda :


P iEtPP| a|Eab
P abe|eP
E b
18

Elimine la recursividad izquierda y factorice si es necesario las

siguientes gramticas:
1.LA|F
F(S)
S S L| L
A num | id
2.E E | Ea | Fb | F
F ( E ) | Bbe | Bba
B B a| C | b
C a | CbC

3.<S>:: a <B> <A>| <C> | <D>


<A>:: c <F> d |<F>|<A>b<A>
<B>:: <E> | f <S> | f <S> a
<C>:: gh <D>ha| gh <D> tab|hab
<D>:: x | y | z |<C> | x y | z y
<E>:: <A><H>| c <B> | e
<F>:: <A><B> | a

*Se entregarn antes del da Mircoles 23 de Octubre de 2013


(23:59:59 hora limite).
*Incluir la redaccin de cada ejercicio
*Portada y encabezados de pagina

Teora computacional
Clase 16: GLC's recursivas y no factorizadas
Prof. Edgardo Adrin Franco Martnez

Ejercicios 13: Recursividad y factorizacin de gramticas

19