Está en la página 1de 19

Clase 16: GLC’s recursivas y no factorizadas

Solicitado: Ejercicios 13: Recursividad y factorización de gramáticas

M. en C. Edgardo Adrián Franco Martínez 1


http://computacion.cs.cinvestav.mx/~efranco
@efranco_escom
edfrancom@ipn.mx
Contenido

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
• Recursividad izquierda de una GLC
• Eliminación de la recursividad izquierda
• Ejemplo (Eliminación de la recursividad izquierda)
• Indeterminismo en las producciones
• Factorización de una gramática
• Ejemplo 1 (Factorización de una gramática)
• Ejemplo 2 (Factorización de una gramática)
• Ejercicios 13: Recursividad y factorización de
gramáticas
2

Compiladores (Lenguajes y gramáticas - Edgardo A. Franco)


Recursividad izquierda de una GLC

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
• Una gramática libre de contexto recursiva por
izquierda da lugar a algunos problemas
computacionales a la hora de construir de manera
descendente un árbol de derivación de una cadena,
pudiendo afectar a algoritmos descendentes que
caen en un bucle infinito de recursión. S

S → Sa S a

• Una GLC es recursiva por la izquierda si tiene un no-


3
terminal A tal que existe una producción:
A →Aα.
Eliminación de la recursividad izquierda

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
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’| ε

4
Ejemplo (Eliminación de la recursividad izquierda)

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
• Ejemplo: Eliminar la recursividad a izquierdas
de:
E → E+T
E→T
T→F
F → (E)
F → id
T → T*F

5
E → E+T •Se identifica si cada una de las producciones que
E→T tienen la forma:

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
T→F A→ A α| β
F → (E)
•La producción E → E+T , tiene recursividad
F → id izquierda, por lo que:
T → T*F E → E+T | T
A→ A α| β
Se igualan los símbolos según la formula:
A=E
α =+T
β=T
Se utilizan las reglas de remplazo
A→ β1A’| β2A’|…|βnA’
A’→ α1A’|α2A’|…|αmA’| ε
6
E → TE’
E’ → +TE’|ε
E → E+T • A las producciónes T → T*F | F, también se le
E→T aplica el mismo proceso :

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
T→F A=T
α = *F
F → (E)
β=F
F → id • Se utilizan las reglas de remplazo
T → T*F A→ β1A’| β2A’|…|βnA’
A’→ α1A’|α2A’|…|αmA’| ε

T→ FT’
T’→ *FT’ | ε

7
• La gramática con la recursividad izquierda eliminada es:

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
E → TE’ Se hace necesario eliminar las
E’ → +TE’ producciones del tipo A→ λ para dejar
E’→ ε una gramática bien formada.
T→ FT’
E → TE’
T’→ *FT’
E’ → +TE’
T’→ ε
E→ T
F→ (E)
E’→ +T
F→ id T→ FT’
T→ F
T’→ *FT’
T’→ *F
F→ (E)
F→ id 8
E → TE’
E’ → +TE’

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
E→ T Se hace necesario también eliminar las
reglas de redenominación
E’→ +T
T→ FT’ E → TE’
T→ F E’ → +TE’
T’→ *FT’ E→ (E)
T’→ *F E→ id
E’→ +T
F→ (E)
T→ FT’
F→ id T→ (E)
T→ id
T’→ *FT’
T’→ *F
F→ (T) 9
F→ id
• Finalmente la gramática no recursiva por izquierda
es:

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
E → TE’
E’ → +TE’
E→ (E)
E→ id
E’→ +T
T→ FT’
T→ (E)
T→ id
T’→ *FT’
T’→ *F
F→ (T)
10
F→ id
Indeterminismo en las alternativas

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
• Problemas de indeterminismo cuando varias
alternativas en una misma producción comparten el
mismo prefijo, ya que un algoritmo computacional
no sabría cuál elegir de manera inmediata.

• Tendrá que probar una producción y si se produce un


error haría backtracking.

"Existen transformaciones de gramáticas para la eliminación del


indeterminismo. Estas transformaciones no modifican el
lenguaje que se está reconociendo, pero si que cambian el
aspecto de la gramática, que es en general menos intuitiva". 11
• Cuando dos alternativas para un no-terminal
empiezan igual, no se sabe qué alternativa

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
expandir. P.g.:

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


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

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


dos alternativas elegir para expandir . La idea es
reescribir la producción para retrasar la decisión
hasta haber visto de la entrada lo suficiente para
poder elegir la opción correcta.
12
Factorización izquierda de una gramática

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
1. Para cada no terminal A buscar el prefijo α mas
largo común a dos o más alternativas de A (α≠ε) y
se agrupan en la forma: A→ αβ1|αβ2|…|αβn|δ
donde δ representa todas las alternativas de A que
no comienzan por α.

2. Se sustituyen las producciones de A por:


• A→ αA’| δ
• A’→ β1|β2| … |βn

13
Ejemplo 1 (Factorización de una gramática)

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
• Ejemplo: Factorizar la siguiente gramática

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

α β1

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

α β2

<Sentencia> ::= otras

14
δ
• Realizando el remplazo
• A→ αA’| δ

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
• A’→ β1|β2| … |βn

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

α δ
<Sentencia’>::= else <Sentencia> | ε

β1 β2

15
• Al factorizar no es conveniente eliminar reglas no
generativas:

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
<Sentencia> ::= if <Expresion> then <Sentencia’> | otras
<Sentencia’>::= else <Sentencia> | ε

• Eliminar la regla no generativa vuelve a generar


indeterminismo.

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


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

16
Ejemplo 2 (Factorización de una gramática)

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
• Factorizar la siguiente gramática:
• P→ iEtPabe
• P→ iEtPeP
• P→ a
• P→ Eab
• E→ b

17
• Factorizar la siguiente gramática:
• P→ iEtPabe| iEtPeP|a|Eab

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
• E→ b

• Se factoriza de la siguiente manera:


P→ iEtP (abe|eP)|a|Eab
P’→ abe|eP
E→ b

• Así que la gramática queda :

P→ iEtPP’| a|Eab
P’→ abe|eP
E→ b
18
Ejercicios 13: “Recursividad y factorización de gramáticas”

Prof. Edgardo Adrián Franco Martínez


Clase 16: GLC's recursivas y no factorizadas
Teoría computacional
• Elimine la recursividad izquierda y factorice si es necesario las
siguientes gramáticas:
1.- 3.-
L→A|F <S>:: a <B> <A>| <C> | <D>
F→(S) <A>:: c <F> d |<F>|<A>b<A>
S → S L| L <B>:: <E> | f <S> | f <S> a
A → num | id <C>:: gh <D>ha| gh <D> tab|hab
<D>:: x | y | z |<C> | x y | z y
2.- <E>:: <A><H>| c <B> | e
E → E | Ea | Fb | F <F>:: <A><B> | a
F → ( E ) | Bbe | Bba
B → B a| C | b
C → a | CbC

*Se entregarán antes del día Miércoles 23 de Octubre de 2013


(23:59:59 hora limite). 19
*Incluir la redacción de cada ejercicio
*Portada y encabezados de pagina

También podría gustarte