Universidad de Costa Rica
|
|
Duración: Ciento veinte minutos. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la documentación. 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] Considere la siguiente gramática G:
E → A a B b A → B E | ε | A B → b
a b $ Pr() Sg() +--------+--------+-----+ { a b } { $ a } E | E→AaBb | E→AaBb | | { b ε } { a } A | | A→BE | A→ε | { b } { a b } B | | B→b | |
1.a) [5 pts] Calcule los conjuntos Primero() y Siguiente() para G.
1.b) [7 pts] Calcule las tablas LL(1) para G. Explique lo que hace.
1.c) [7 pts] Calcule las tablas SLR(1) para G. Explique lo que hace. 1.d) [7 pts] Calcule las tablas LALR(1) para G. Explique lo que hace. 1.e) [7 pts] Calcule las tablas LR(1) para G. Explique lo que hace.2) [33 pts] Es bien sabido que si ya se cuenta con un autómata determinista (sin movimientos ε) que reconoce el lenguaje L, es fácil obtener el autómata complementario, que reconoce Σ*-L: basta cambiar en L los estados finales por no finales, y los no finales por finales (siempre y cuando la tabla de transiciones esté completa).
2.a) [11 pts]
Haga el diagrama del autómata determinista L03i que
reconozca hileras en el alfabeto
Σ = {0,1}
que comienzan con cero,
pero que tienen una cantidad divisible por tres de unos.
2.b) [0 pts] Haga un autómata que reconozca los prefijos válidos para una hilera que está en el lenguaje L.
2.c) [11 pts]
Encuentre el autómata noL03i que reconoce el lenguaje
complementario de L03i, esto es, el autómata que cumple
estas condiciones:
(Σ* = L03i
U noL03i)
& (Σ* - L03i = noL03i)
& (L03i ∩ noL03i = Ø).
2.d) [11 pts] Minimice el autómata L03i. Muestre el diagrama final del autómata minimizado.
2.e) [0 pts] Recuerde que siempre debe explicar y justificar lo que hace al resolver cada pregunta.
3) [33 pts]
Al examinar el texto de un programa C++ es posible determinar cuales
rutinas
invocan a las demás. En la figura adjunta se muestra un
ejemplo de cómo podría ser el resultado de la
ejecución del programa
ArbolCPP.exe que examina un archivo C++ y produce el
listado jerárqico de las invocaciones de funciones y
métodos.
Implemente
|
|
Adolfo Di Mare <adolfo@di-mare.com>.
|