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 el compilador que usted modificó en la primera tarea programada.
1.a) [7 pts]
Explique porqué el método
Compilador::aparea()
del compilador de la primera
tarea programada no necesita recibir como parámetro el
siguiente token a procesar.
1.b) [7 pts] Explique cómo modificar el compilador para que construya el árbol de sintaxis que corresponde a la expresión evaluada.
1.c) [19 pts] Especifique, declare y defina las clases y métodos que se necesitan para que ese compilador construya el árbol de sintaxis que corresponde a al expresión evaluada.
2) [33 pts] Considere la expresión regular
r = (a b* c) | (a b c*)
2.a) [11 pts]
Construya el autómata no determinista "N" que
reconoce el lenguaje de "r
".
2.b) [11 pts] Obtenga a partir de "N" un autómata determinista "D" que reconoce el mismo lenguaje que "N".
2.c) [11 pts] Obtenga a partir de "D" un autómata determinista "M" que reconoce el mismo lenguaje que "D", pero que además es óptimo porque tiene una cantidad mínima de estados.
3) [33 pts] La gramática
G
tiene estas producciones:
S --> S(S) | ε
3.a) [11 pts] Describa en palabras el lenguaje que esta gramática genera.
3.b) [11 pts]
Haga una derivación de una hilera "w
" en
L(G
) en la que aplique por lo menos 10 producciones
de "G
".
3.d) [11 pts]
Aplique el algoritmo para eliminar la recursividad izquierda para
obtener, partir de "G
", una gramática
equivalente que no sea recursiva izquierda.
4) [33 pts] Considere el siguiente bloque de código, escrito en un lenguaje similar a Pascal:
FOR numero := 1 TO N BEGIN suma := 0; temp := numero; WHILE temp <> 0 BEGIN { suma de dígitos } digito := temp MOD 10; { al cubo } suma := suma + (digito * digito * digito); temp := temp DIV 10; END; IF suma = numero THEN BEGIN WriteLn(numero,' Suma de sus dígitos al cubo ', suma); END; END; |
4.a) [11 pts] Diga cuáles son los tokens y cuáles son los lexemas en este bloque de código.
4.b) [11 pts] Escriba una gramática que genere la mayor parte de los programas similares éste.
4.c) [11 pts] Haga un programa Lex que sirva para obtener los tokens y lexemas de este lenguaje.
Adolfo Di Mare <adolfo@di-mare.com>.
|