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 tres de las cuatro preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] Considere los lenguajes L(G1) y L(G2) definidos de la siguiente manera:
1.a) [11 pts] Escriba las gramáticas libres de contexto G1 y G2 para L(G1) y L(G2).
1.b) [11 pts] Muestre que tanto G1 como G2 son LL(1).
1.c) [2 pts] Escriba la gramática libre de contexto para L(G1) U L(G2).
1.d) [9 pts] ¿Es la gramática de L(G1) U L(G2) una gramática LL(1)?
2) [33 pts] Considere el lenguaje de paréntesis anidados, en que las hileras tienen esta forma:
[] () [[[]]] ((())) [([ ([( )]) ])]
2.a) [11 pts] Escriba una gramática LL(1) que sirva para generar todas las hileras de paréntesis anidados. Evite que la hilera nula sea generada.
2.b) [11 pts] Encuentre las tablas que un analizador sintáctico LL(1) usaría para reconocer hileras este lenguaje.
2.c) [11 pts]
Muestre cómo un analizador sintáctico que use las
tablas que usted calculó reconocería la siguiente
hilera (suponga que el analizador léxico salta sobre los
espacios en blanco):
[] () [[]] (()) [([ ])]
3) [33 pts] El lenguaje C tiene una instrucción con la siguiente forma:
for ( exp1; exp2; exp3 )
{ stmt }
3.a) [11 pts] Haga un diagrama en el que muestre cómo debe quedar compilado este código.
3.b) [22 pts] Escriba un esquema de traducción
por sintaxis que transforme un ciclo for
en
código objeto para una máquina de pila.
4) [33 pts] La gramática Gno parece remediar el problema de ambigüedad del "
else
":
stmt ==> if expr then stmt
| m_stmt
m_stmt ==> if expr then m_stmt else stmt
| other
4.a) [11 pts] Encuentre las tablas que un analizador sintáctico LL(1) usaría para reconocer hileras de L(Gno).
4.b) [8 pts] Muestre que la gramática Gno no es LL(1): encuentre una hilera que tenga dos derivaciones más izquierdas. Dibuje los dos árboles de derivación para la hilera.
4.c) [3 pts]
Arregle esta gramática para solucionar el problema de
ambigüedad del "else
". Explique
por qué su gramática sí soluciona el
problema, en contraposición a Gno .
4.d) [11 pts] Encuentre las tablas que un analizador sintáctico LL(1) usaría para reconocer hileras generados con su gramática.
Adolfo Di Mare <adolfo@di-mare.com>.
|