Enunciado Jul12

Anuncio
TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES
CURSO 2011/12 – CONVOCATORIA DE JULIO
12 de Julio de 2012
NORMATIVA
1.
2.
3.
4.
5.
No está permitido salir del examen durante la primera media hora.
Es obligatorio entregar antes de abandonar el examen.
Tiempo disponible: 2 horas y 45 minutos.
Este examen consta de 5 ejercicios.
Las calificaciones obtenidas en este examen, junto con las de la práctica se publicarán
en el tablón de la asignatura el día 13 de julio a las 10:00 horas.
6. Las revisiones se realizarán el martes 17 de julio a las 11:00 horas.
Ejercicio 1 (3 puntos)
1. Dado  = {a}, sea la siguiente simplificación de la expresión regular a ( a* | a )* en
tres pasos:
a ( a* | a )* = ( a+ | aa )* = ( a+ ) * = a+
Analizar independientemente cada uno de los tres pasos. Para cada paso, se indicará
de forma razonada si es correcto o no. (0,6 puntos)
2. Estudiar el siguiente AFN y obtener directamente un AFD equivalente (no se
recomienda utilizar ningún algoritmo) (0,4 puntos).
a
q1
a
q2
a


q0
q3
a
a
q4

q5
Sobre el alfabeto = {0, 1} sea el lenguaje L = {Palabras en las que cada aparición de un 0 va
inmediatamente precedida y seguida de un símbolo 1}. Por ejemplo, pertenecen a este
lenguaje las palabras , 11, 11101, 101110110101; pero no pertenecen 01 ni 1001.
3. Obtener un AFD que reconozca el lenguaje L . (0,4 puntos).
4. Minimizar el AFD obtenido en el apartado anterior. En todo caso, se deberán incluir en
la solución los pasos dados con el algoritmo de minimización. (0,4 puntos).
5. Obtener una expresión regular que denote el lenguaje L . (0,8 puntos).
6. Obtener ahora un AFD para el lenguaje L' = L - {1n| n>0} . (0,4 puntos).
Ejercicio 2 (2 puntos)
Dado el alfabeto  = {a, b} se considera el lenguaje L = {an bn | n>=0}  {an b2n | n>=0}.
Se pide:
1. Obtener un autómata de pila con reconocimiento por estado final que reconozca L . La
solución se realizará a través de un diagrama de transiciones. Se considerará que las
palabras siempre vienen finalizadas por el símbolo $, por lo que será obligatorio que el
autómata de pila propuesto trate dicho símbolo. Indicar de forma justificada si el
autómata propuesto es determinista o no. (1 punto).
2. Obtener una gramática independiente del contexto que defina L . (0,4 puntos).
3. Obtener una gramática independiente del contexto que defina L' = {an bm | m>=n>=0}
(0,4 puntos).
4. Obtener una gramática independiente del contexto que defina L' ' = {an bm | m>n>=0}
(0,2 puntos).
Ejercicio 3 (2,5 puntos)
En un lenguaje de programación al estilo de C++, se desea definir una sentencia de alternativa
múltiple del tipo switch, cuya estructura general es la siguiente:
switch ( expresión )
{
case constantes : sentencias break(opc.)
case constantes: sentencias break(opc.)
.................................
default:
sentencias
}
Una sentencia switch comienza con la palabra reservada switch, le sigue una expresión entre
paréntesis y finaliza por el cuerpo de la sentencia delimitado por los símbolos { y }.
El cuerpo de la sentencia switch está formado por una o más alternativas. Las alternativas pueden
ser: alternativas case y alternativa default.
Las alternativas case están formadas por la palabra reservada case, una lista de una o más
constantes separadas por el símbolo ‘,’, el símbolo ‘:’, una lista de cero o más sentencias, y
finalmente, aunque de forma opcional, la palabra reservada break . Cada constante pueden ser
indistintamente entera o carácter cuyos componentes léxicos se representan por cte_ent y
cte_car, respectivamente. Cada sentencia lleva detrás el símbolo ‘;´ y no necesitan una definición
sintáctica, se representarán por el no terminal <sentencia> .
La alternativa default está formada por la palabra reservada default, el símbolo ‘:’ que la separa
de cero o más sentencias (sin palabra reservada break). Cada sentencia lleva detrás el símbolo ‘;´
y no necesitan una definición sintáctica, se representarán por el no terminal <sentencia> .
La alternativa default no es obligatorio que aparezca, pero en caso de hacerlo, sólo habrá una y
deberá ser la última de las alternativas. Además, si la sentencia switch no tiene ninguna
alternativa case, entonces sí es obligatoria la alternativa default.
Para construir la expresión se podrán utilizar identificadores, constantes enteras y constante
carácter como operandos. Los únicos operadores que se pueden utilizar son : +, -, * y / (todos
ellos binarios). Los operadores que primero se tratan son: * y /, con la misma precedencia;
mientras que los operadores - y + se tratan después, también con la misma precedencia entre
ellos. Se podrán utilizar paréntesis de la forma habitual para alterar la precedencia.
Se pide:
Crear en notación BNF Ampliada (extendida) la gramática sintáctica que defina la sentencia
switch especificada anteriormente.
Ejemplos correctos de sentencias switch:
switch ( uno * ( 2 + tres ) ) {
case 5 : <sentencia>;<sentencia>; break
case ‘a’, 6 : <sentencia>;
default : <sentencia>; <sentencia>; <sentencia>;
}
switch ( ‘a’ ) {
default : <sentencia>;
}
Ejercicio 2 (1,5 puntos)
Dada la siguiente gramática escrita en notación formal
SA$
ABC
CaBC
|
BDE
EbDE
|
Dc
|
A través del cálculo de los símbolos directores de las producciones que sean necesarias,
justificar si la gramática dada cumple o no la condición LL(1).
Nota: el cálculo de directores deberá aparecer de forma detallada en función de los iniciales y
seguidores que sean necesarios.
Ejercicio 5 (1 punto)
Dada la siguiente gramática:
1 S’  S
2 SbS
3
|aS
4
|
Atribuirla para que contabilice la longitud de la subcadena de símbolos a más larga que tenga
la palabra. El resultado se visualizará en la producción 1. Por ejemplo, para la palabra
baabaaaabaa el resultado será: LONGITUD 4.
Descargar