Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido
Transcript of Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido
![Page 1: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/1.jpg)
![Page 2: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/2.jpg)
Contenido
• Análisis Descendente Predictivo
• Gramáticas LL(1)
• Método Descendente LL(1)
• Definiciones
• Pasos para el Método LL(1)
• Ejemplo
• Ejercicios
2 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
2
![Page 3: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/3.jpg)
Análisis Descendente Predictivo
•Es un tipo especial del análisis sintáctico
descendente recursivo
•Observa el siguiente token en la cadena de entrada
para determinar cual va a ser la regla de producción
a aplicar en la construcción del árbol de derivación.
3 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
3
![Page 4: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/4.jpg)
Análisis Descendente Predictivo
•El símbolo de pre análisis determina sin
ambigüedad el procedimiento seleccionado para
cada entrada.
•Las gramáticas con análisis de una pasada son de
tipo LL(k) las mas frecuentemente usadas son las
de tipo LL1.
4 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
4
![Page 5: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/5.jpg)
Gramáticas LL(1)
• Las gramáticas LL(1) permiten construir de forma
automática un analizador direccional determinista
descendente con tan sólo examinar en cada momento el
símbolo actual de la cadena de entrada (símbolo de pre
análisis) para saber que producción aplicar.
5 Compiladores (Análisis Sintáctico IV - Edgardo A. Franco)
Teorema 1: Una gramática LL(1) no puede ser recursiva
por la izquierda y debe estar factorizada.
Teorema 2: Una gramática LL(1) es no ambigua
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
5
![Page 6: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/6.jpg)
Método Descendente LL(1) Análisis Descendente No Recursivo (Predictivo)
• La primera L representa el tipo de lectura de la cadena de
entrada Left (de izquierda a derecha) método direccional
(from left to rigth).
• La segunda L representa la derivación Left, por la
izquierda (left-most derivation).
• Y el 1, es el número de símbolos de entrada para analizar
por anticipado. Método determinista (Símbolo de pre
análisis).
6 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
6
![Page 7: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/7.jpg)
1. Buffer de Entrada
• Cadena de entrada a analizar, finaliza con el carácter $
2. Pila
• Estructura de datos que almacena temporalmente
símbolos gramaticales que se van utilizando.
3. Tabla de Análisis Sintáctico
• Matriz bidimensional que sirve para el análisis
4. Cadena de Salida
• Cadena de Salida posterior al análisis
Método Descendente LL(1) Componentes para el análisis
7 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
7
![Page 8: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/8.jpg)
8 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
8
Método Descendente LL(1) Componentes para el análisis
![Page 9: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/9.jpg)
Pasos para el Método LL(1)
1. Escribir adecuadamente la gramática.
2. Calcular el conjunto de FIRST'S (PRIMEROS) y FOLLOW'S (SIGUIENTES).
3. Construir la tabla de Análisis Sintáctico.
4. Hacer el análisis de sintáctico por medio de la pila y la tabla de análisis.
9
Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
9
![Page 10: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/10.jpg)
1. Escribir adecuadamente la
gramática • Para poder utilizar un analizador descendente no recursivo
la gramática debe cumplir con:
• No debe tener ambigüedad
• No debe ser recursiva por la izquierda
• Debe estar factorizada
10 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
10
![Page 11: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/11.jpg)
Símbolo PRIMERO
Si X es terminal PRIMERO(x) = {x}
Si X → ε Producción
Añadir ε al PRIMERO (x)
Si X es No Terminal y X →YZW
1. Si Y → ε añadir el PRIMERO (Z) 2. Si Z → ε añadir el PRIMERO (W) 3. Si todos generan ε entonces añadir →ε,
de lo contrario no se agrega.
2. Calcular el conjunto de PRIMEROS
11 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
11
![Page 12: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/12.jpg)
12 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
2 . Calcular el conjunto de PRIMEROS • Ejemplo 1
• E → T E’
• E’ → + T E’ | ε
• T → F T’
• T’ → * F T’ | ε
• F → ( E ) | ident
PRIMERO(E) = PRIMERO(TE’)
PRIMERO(E’) = { + , ε}
PRIMERO(T) = PRIMERO(FT’)
PRIMERO(T’) = { * , ε}
PRIMERO(F) = { ( , ident }
*como PRIMERO(T) no incluye ε
PRIMERO(E)=PRIMERO(T)
*como PRIMERO(F) no incluye ε
PRIMERO(T)=PRIMERO(F)
PRIMERO(E) = { ( , ident }
PRIMERO(E’) = { + , ε }
PRIMERO(T) = { ( , ident }
PRIMERO(T’) = { * , ε }
PRIMERO(F) = { ( , ident }
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
12
![Page 13: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/13.jpg)
13 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
2 . Calcular el conjunto de PRIMEROS • Ejemplo 2
• A → Aa | BCD
• B → b | ε
• C → c | ε
• D → d | Ce
PRIMERO(A) = {b, c, d, e }
PRIMERO(B) = { b, ε }
PRIMERO(C) = { c , ε }
PRIMERO(D) = { d, c , e}
PRIMERO(A) = PRIMERO(A) U PRIMERO(BCD)
PRIMERO(B) = { b , ε}
PRIMERO(C) = { c , ε}
PRIMERO(D) = {d} U PRIMERO(Ce)
*como PRIMERO(B) incluye ε y como PRIMERO(C) incluye
ε PRIMERO(A)=PRIMERO(BCD) *
*como PRIMERO(C) incluye ε PRIMERO(D)=PRIMERO(Ce)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
13
![Page 14: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/14.jpg)
Símbolo SIGUIENTE
Si B es símbolo inicial SIGUIENTE ( B) = { $}
Si A → α B M Producción
1. SIGUIENTE (B) = PRIMERO(M) excepto ε. 2. Si el PRIMERO(M) contiene ε entonces añadir el SIGUIENTE (A) a SIGUIENTE (B)
Si A → B Producción
Añadir el SIGUIENTE (A) a SIGUIENTE (B)
14 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
2. Calcular el conjunto de SIGUIENTES
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
14
![Page 15: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/15.jpg)
15 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
2 . Calcular el conjunto de SIGUIENTES • Ejemplo 1
• E → T E’
• E’ → + T E’ | ε
• T → F T’
• T’ → * F T’ | ε
• F → ( E ) | ident
SIGUIENTE(E) = $ U PRIMERO())
SIGUIENTE(E’) = SIGUIENTE(E) U SIGUIENTE(E’)
SIGUIENTE(T) = PRIMERO(E’) y ε esta en PRIMERO(E’)
se añade SIGUIENTE(E) y SIGUIENTE(E’)
SIGUIENTE(T’) = SIGUIENTE(T) U SIGUIENTE(T’)
SIGUIENTE(F) = PRIMERO(T’) y como incluye la ε se añade
SIGUIENTE(T’) y SIGUIENTE(T)
PRIMERO(E) = { ( , ident }
PRIMERO(E’) = { + , ε }
PRIMERO(T) = { ( , ident }
PRIMERO(T’) = { * , ε }
PRIMERO(F) = { ( , ident }
SIGUIENTE(E) = { $ , )}
SIGUIENTE(E’) = {$, )}
SIGUIENTE(T) = { +, $, )}
SIGUIENTE(T’) = { +, $, )}
SIGUIENTE(F) = { *, +, $, )}
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
15
![Page 16: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/16.jpg)
16 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
2 . Calcular el conjunto de SIGUIENTES • Ejemplo 2
• A → Aa | BCD
• B → b | ε
• C → c | ε
• D → d | Ce
SIGUIENTE(A) = {$, a }
SIGUIENTE(B) = { c, d, e }
SIGUIENTE(C) = { e, d, c}
SIGUIENTE(D) = { $, a}
SIGUIENTE(A) = {$} U PRIMERO (a)
SIGUIENTE(B) = PRIMERO(C) y como PRIMERO(C)
incluye ε =PRIMERO (CD)
SIGUIENTE(C) = PRIMERO(e) U PRIMERO (D)
SIGUIENTE(D) = SIGUIENTE(A)
PRIMERO(A) = {b, c, d, e }
PRIMERO(B) = { b, ε }
PRIMERO(C) = { c , ε }
PRIMERO(D) = { d, c , e}
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
16
![Page 17: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/17.jpg)
3. Construir la tabla de Análisis Sintáctico
Símbolos
No Terminales
Símbolo Terminal
17 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
17
![Page 18: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/18.jpg)
3. Construir la tabla de Análisis Sintáctico
Se colocan las
producciones
que corresponden
a los datos
obtenidos del
cálculo del PRIMERO
18 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
18
![Page 19: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/19.jpg)
4. Hacer el análisis de sintáctico por medio
de la pila y la tabla de análisis
Pila Entrada
. . .
19 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Pasos para el Método LL(1)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
19
![Page 20: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/20.jpg)
Ejemplo LL(1)
Partiendo de la Gramática:
E → T E′
E′ → ‘+’ T E′ | ε
T → F T′
T′ → ‘x’ F T′ | ε
F → num | ‘(‘ E ‘)’
1. Es una gramática adecuada para el análisis LL(1)
20 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
20
![Page 21: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/21.jpg)
Ejemplo LL(1)
2. Cálculo del conjunto de PRIMEROS
E → T E′
E′ → ‘+’ T E′
| ε
T → F T′
T′ → ‘x’ F T′
| ε
F → num
| ‘(‘ E ‘)’
Símbolo
No Terminal PRIMERO
E num, (
E’ +, ε
T num, (
T’ x, ε
F num, (
21 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
21
![Page 22: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/22.jpg)
Ejemplo LL(1)
2. Cálculo del conjunto de SIGUIENTES
E → T E′
E′ → ‘+’ T E′
| ε
T → F T′
T′ → ‘x’ F T′
| ε
F → num
| ‘(‘ E ‘)’
Símbolo
No Terminal SIGUIENTE
E $ , )
E’ $ , )
T +, $, )
T’ + ,$, )
F x, +, $, )
22 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
22
![Page 23: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/23.jpg)
3. Construir la tabla de Análisis Sintáctico
num + x ( ) $
E E→T E’ E→T E’
Símbolo
No Terminal PRIMERO
E num, (
PRIMERO PRIMERO
E → T E′
23 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1)
E → T E′
E′ → ‘+’ T E′ | ε
T → F T′
T′ → ‘x’ F T′ | ε
F → num | ‘(‘ E ‘)’
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
23
Colocar la producción que genera
al símbolo terminal primero,
excepto las producciones vacías
![Page 24: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/24.jpg)
3. Construir la tabla de Análisis Sintáctico
Símbolo
No Terminal PRIMERO
E’ +, ε
PRIMERO
E′ → ‘+’ T E′
num + x ( ) $
E E→T E’ E→T E’
E’ E′→ ‘+’ T E′ E’→ε E’→ε
24 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1)
E → T E′
E′ → ‘+’ T E′ | ε
T → F T′
T′ → ‘x’ F T′ | ε
F → num | ‘(‘ E ‘)’
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
24
Para el caso de los No terminales con
el símbolo ε en su conjunto de
primeros (Las producciones vacías se
colocan según el conjunto de
siguientes)
Símbolo
No Terminal SIGUIENTE
E’ $ , )
![Page 25: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/25.jpg)
3. Construir la tabla de Análisis Sintáctico
num + x ( ) $
E E→T E’ E→T E’
E’ E′→ ‘+’ T E′
T T→F T’ T→F T’
T’ T'→‘x’F T’
F F → num F→‘(‘ E ‘)’
25 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1)
Símbolo
No Terminal PRIMERO
E num, (
E’ +, ε
T num, (
T’ x, ε
F num, (
E → T E′
E′ → ‘+’ T E′ | ε
T → F T′
T′ → ‘x’ F T′ | ε
F → num | ‘(‘ E ‘)’
Colocar la producción que genera
al símbolo terminal primero,
excepto las producciones vacías
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
25
![Page 26: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/26.jpg)
3. Construir la tabla de Análisis Sintáctico
num + x ( ) $
E E→T E’ E→T E’
E’ E′→ ‘+’ T E′ E’→ε E’→ε
T T→F T’ T→F T’
T’ T’→ε T→‘x’F T’ T’→ε T’→ε
F F → num F→‘(‘ E ‘)’
26 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1)
Símbolo
No Terminal PRIMERO
E num, (
E’ +, ε
T num, (
T’ x, ε
F num, (
E → T E′
E′ → ‘+’ T E′ | ε
T → F T′
T′ → ‘x’ F T′ | ε
F → num | ‘(‘ E ‘)’
Símbolo
No Terminal SIGUIENTE
E $ , )
E’ $ , )
T +, $, )
T’ + ,$, )
F x, +, $, )
Para el caso de los No terminales con
el símbolo ε en su conjunto de
primeros (Las producciones vacías se
colocan según el grupo de siguientes)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
26
![Page 27: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/27.jpg)
3. Construir la tabla de Análisis Sintáctico
num + x ( ) $
E E→T E’ E→T E’
E’ E′→ ‘+’ T E′ E’→ε E’→ε
T T→F T’ T→F T’
T’ T’→ε T→‘x’F T’ T’→ε T’→ε
F F → num F→‘(‘ E ‘)’
27 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1)
Símbolo
No Terminal PRIMERO
E num, (
E’ +, ε
T num, (
T’ x, ε
F num, (
E → T E′
E′ → ‘+’ T E′ | ε
T → F T′
T′ → ‘x’ F T′ | ε
F → num | ‘(‘ E ‘)’
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
27
![Page 28: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/28.jpg)
4. Hacer el análisis de sintáctico por medio de la pila y la tabla de
análisis
Pila Entrada
$ E num + num x num $
num ‘+’ num ‘x’ num
Colocar $ y
el símbolo inicial
Colocar la cadena
de entrada y $
28 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
28
![Page 29: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/29.jpg)
Pila Entrada
$ E
$ E’ T
num + num x num $
num + num x num $
num
E E→T E’
Se busca el símbolo terminal y el no
terminal, remplazándolo por la
producción que le corresponda.
Colocándola de izquierda a derecha 29
Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1) num + x ( ) $
E E→T E’ E→T E’
E’ E′→ ‘+’ T
E′ E’→ε E’→ε
T T→F T’ T→F T’
T’ T’→ε T→‘x’F
T’ T’→ε T’→ε
F F → num F→‘(‘ E
‘)’
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
29
![Page 30: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/30.jpg)
Pila Entrada
$ E
$ E’ T
$ E’ T’ F
$ E’ T’ num
num + num x num $
num + num x num $
num + num x num $
num + num x num $
Cuando se llega a una coincidencia, se eliminan ambos,
y se continua con el análisis
30 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1) num + x ( ) $
E E→T E’ E→T E’
E’ E′→ ‘+’ T
E′ E’→ε E’→ε
T T→F T’ T→F T’
T’ T’→ε T→‘x’F
T’ T’→ε T’→ε
F F → num F→‘(‘ E
‘)’
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
30
![Page 31: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/31.jpg)
Pila Entrada
$ E
$ E’ T
$ E’ T’ F
$ E’ T’ num
$ E’
$ E’ T +
$ E’ T’ F
. . .
num + num x num $
num + num x num $
num + num x num $
num + num x num $
+ num x num $
+ num x num $
num x num $
. . . 31
Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1) num + x ( ) $
E E→T E’ E→T E’
E’ E′→ ‘+’ T
E′ E’→ε E’→ε
T T→F T’ T→F T’
T’ T’→ε T→‘x’F T’ T’→ε T’→ε
F F → num F→‘(‘ E
‘)’
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
31
![Page 32: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/32.jpg)
4. Proceso de análisis LL(1)
Pila Entrada
. . .
$ E’ T’ F
$ E’ T’ num
$ E’ T’ F x
$ E’ T’ F
$ E’ T’ num
$ E’ T’
$ E’
$ E’
$
$
. . .
num x num $
num x num $
x num $
num $
num $
$
$
$
$
$
Se acepta la
cadena si se
logra eliminar
de la pila y la
entrada, todos
los símbolos.
De lo contrario
no se acepta
la cadena.
32 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejemplo LL(1)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
32
![Page 33: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/33.jpg)
• Si no es posible realizar el cruce de símbolos durante la
tabla, la gramática es ambigua o no es apta para el
análisis LL(1).
• Si nunca es posible llegar a una cadena valida, entonces
la cadena es recursiva por la izquierda
• Si al realizar el cruce en la tabla no existe producción a
aplicar entonces la cadena no pertenece a la gramática.
Observaciones del análisis LL(1)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
33
![Page 34: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/34.jpg)
Ejercicio 1
•Partiendo de la siguiente gramática, evalúe las
siguientes cadena aaab, a, ab, abbbb
•X → a | Y
•Y → Y b | a
•Hacerlo por el análisis LL(1). Escriba adecuadamente la
gramática. Calcule el PRIMERO, construya la tabla de
análisis sintáctico, evalúe con la pila.
34 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
34
![Page 35: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/35.jpg)
Ejercicio 1
• X → a | Y
• Y → Y b | a
• Gramática ambigua al hacer el análisis LL(1)
este no opera con cadenas validas.
•Quitando ambigüedad
•X →aY
•Y →bY| ε
35 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
35
![Page 36: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/36.jpg)
• Partiendo de la siguiente gramática, evalúe la siguientes cadenas aaaabb, aaaab.
•X →Y T
•Y → Z Z
•Z → a a
•T → Tb | b
•Hacer el análisis LL(1).
•Escriba adecuadamente la gramática. Calcule el PRIMERO, construya la tabla análisis sintáctico, evalúe con la pila.
36 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejercicio 2
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
36
![Page 37: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/37.jpg)
•Obtenga la tabla de análisis sintáctico LL(1) para la gramática que se da a continuación.
•Aplique análisis sintáctico LL(1) a las cadenas:
aab$, abbcab$ y abbbab$
37 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejercicio 3
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
37
|
|
|
|
cD
bC
aB
bbDaA
aABCS
![Page 38: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/38.jpg)
•Obtenga la tabla de análisis sintáctico LL(1) para la gramática que se da a continuación.
E → TE'
E' → +TE'|-TE'|ε
T → PT'
T' → *PT'|/PT'|ε
P → FP'
P' → ^FP'|ε
F → (E)|num|var|sin(E)|cos(E)|tan(E)|log(E)|ln(E)|exp(E)
• Aplique análisis sintáctico LL(1) a la cadena: ((num+var)*sin(var)/log(num))-var.
38 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejercicio 4
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
38
![Page 39: Compiladores - Profr. Edgardo Adrián Franco Martínez Contenido](https://reader035.fdocuments.ec/reader035/viewer/2022081701/62e63f2fcf02af58452a0535/html5/thumbnails/39.jpg)
•Entregar vía página web con el titulo
"Ejercicios LL(1)", a más tardar el día
Lunes 23 de mayo de 2011 a las
23:59:59 hrs.
•Deberán estar resueltos a detalle y deben ser
en formato digital.
39 Compiladores (Análisis Sintáctico V - Edgardo A. Franco)
Ejercicios 3 y 4
19, 20 y 21 Análisis sintáctico IV Compiladores - Profr. Edgardo Adrián Franco Martínez
39