Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicio 1.
teniendo la gramática G=({E}, {n, +}, P, E) con las siguientes reglas de producción:
E →T ∨E +T
T →n
E E
E E E E E +T E +T
T T T T T T T n T n
n n n n+ n+n n+n n n +
E
E E E + T
E +T E +T E +T n
T n T T
n T n
n +n n +n n
1.1. Reducciones
Ejercicio 2
n + n + n, T + n + n, E + n + n, E + T + n, E + n, E + T, E
Ventajas:
n1 + n2 + n3 n1 T →n
T + n2 + n3 T E →T
E + n2 + n3 n2 T →n
E + T + n3 E+T E → E +T
E + n3 n3 T →n
E+T E+T E → E +T
1.3. Análisis sintáctico de desplazamiento-reducción
Ejercicio 3.
E →T ∨E +TT → F∨T∗FF → n
$ n*n+n Desplazamiento
n *n+n Reducción
F *n+n Reducción
T *n+n Desplazamiento
T* n+n Desplazamiento
T*n +n Reducción
T*F +n Reducción
T +n Reducción
E +n Desplazamiento
E+ n Desplazamiento
E+n $ Reducción
E+F $ Reducción
E+T $ Reducción
E $ Aceptar
1.4. Conflictos durante el análisis sintáctico de desplazamiento-reducción
Durante el análisis sintáctico de desplazamiento-reducción, pueden surgir
conflictos en el proceso de decisión sobre cuándo aplicar desplazamientos
y reducciones. Estos conflictos se producen cuando existen múltiples
posibilidades de desplazamiento o reducción en un punto dado del análisis.
Resolver estos conflictos de manera eficiente y precisa es un desafío clave
en el diseño y la implementación de analizadores sintácticos de
desplazamiento-reducción.
Por ejemplo:
la cadena aa con la gramática (no ambigua)
G 1=({S , A , B }, {a ,b }, P , S):
S → Aa∨Bb A → aB→ a
$ aa Desplazamiento
a a
conflicto
G 2=( { S , A } , { a , b } , P , S ) :S → aAb∨ Ab A → a
a ab
conflicto
Ejercicio 4.
teniendo la gramática G= ({E, T, F}, {id, +, *, (, )}, P, E) con las siguientes reglas de
producción:
E →T ∨E +T
T → F∨T∗F F → id∨(E)
Desarrollo:
E E E E
T T T T T T
F F F F F F F
id id id id id id + id + ( id + ( id
E E +( E +( E+(
T T T T T T T * F
F F F F F F F F id
id + ( id id id * id id * id id id
E +( T E +( T E +( T )
T T * F T T * F T T * F
F F id F F id F F id
id id id id ) id id
Secuencia de cadenas:
E + ( E ) E + F E + T
id+(id*id), F+(id*id), T+(id*id), E+(id*id), E+(F*id), E+(T*id), E+(T*F), E+(T), E+(E),
E+F, E+T, E F
Reducción:
T ( E ) F
E → E +T → E + F → E + ( E ) → E+ ( T ) → E+ ( T∗F ) → E+ ( T∗id )
T ( E )
→ E+(F∗id ) → E+(id∗id)→ T +(id∗id )→ F +(id∗id) →id +(id∗id)
T T * F
T
T T * F
Análisis sintáctico de desplazamiento-reducción:
F F id
Pila Entrada T TAcción
* F
$
F F Id + (idid* id) Desplazamiento
id id
id + (id * id) Reducción
F F id
F id id + (id * id) Reducción
E + T E + ( id * id) Reducción
T E+(T*F ) Reducción
E+(E ) Desplazamiento
T T * FE + ( E ) $ Reducción
E+F $ Reducción
F F id
id id
E+T $ Reducción
E $ Aceptar
Bibliografía
Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles,
Techniques, and Tools. Pearson.
Grune, D., Ceriel J. H. Jacobs, & Langendoen, K. G. (2000). Parsing Techniques: A
Practical Guide. Springer.
Cocke, J., & Schwartz, J. T. (1970). Programming languages and their compilers:
Preliminary notes. Courant Institute of Mathematical Sciences, New York University.
Universidad de Guanajuato. (2022, July 16). Clase digital 11. Análisis sintáctico:
Análisis ascendente LR - Recursos Educativos Abiertos. Recursos Educativos
Abiertos. Recuperado de https://blogs.ugto.mx/rea/clase-digital-11-analisis-sintactico-
analisis-ascendente-lr/