Universidad de Costa Rica
|
|
Duración: dos horas. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Resuelva las tres preguntas. ¡No haga más de lo que se le pide!
1) [33 pts]
G |
---|
R → R D | ε D → < id N N → ] | > R [ id > |
1.a) [11 pts] Encuentre una hilera de al menos 10 terminales que esté en el lenguaje de la gramática G. Dibuje el árbol de análisis sintácticos para esa hilera.
1.b) [3 pts] Transforme la gramática G en una gramática G' equivalente que sí sea LL(1). Explique lo que hace.
1.c) [8 pts] Calcule los conjuntos Primero() y Siguiente() para G'. Explique lo que hace
1.d) [11 pts] Calcule las tablas LL(1) para la gramática transformada G'. Explique lo que hace.
2) [33 pts]
G |
---|
R → R D | ε D → < id N N → ] | > R [ id > |
2.a) [11 pts] Calcule el autómata SLR(1) para la gramática G. Explique lo que hace.
2.b) [11 pts] Hagas las tablas SLR(1) para el autómata SLR(1) de G. Explique lo que hace.
2.c) [11 pts] Encuentre una hilera de al menos 10 terminales que esté en el lenguaje de la gramática G. Muestre cómo la reconoce el autómata que calculó. Explique lo que hace.
3) [33 pts] Considere el siguiente bloque de código Smalltalk:
!RangedArray methodsFor: 'basic'! do: aBlock 1 to: (self basicSize) do: [:x| aBlock value: (self basicAt: x) ] !! |
3.a) [15 pts] Encuentre una gramática LL(1) para este lenguaje. Explique lo que hace y muestre con un ejemplo pequeño que su gramática es correcta.
3.b) [18 pts]
Escriba un programa C++ que sirva para reconocer este lenguaje.
Implemente los métodos relevantes de la clase
"Analizador_Sintactico
" que usó en su
solución a la
tercera tarea programada.
Suponga que ya cuenta con un
módulo
Lex/Flex que sirva para
obtener los tokens y lexemas de este lenguaje.
3.c) [0 pts] Recuerde que siempre debe explicar y justificar lo que hace al resolver cada pregunta.
Adolfo Di Mare <adolfo@di-mare.com>.
|