TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES CURSO 2010/11 – CONVOCATORIA DE DICIEMBRE 30 de Noviembre de 2010 NORMATIVA 1. No está permitido fumar en el aula de examen. 2. No está permitido salir del examen durante la primera media hora. 3. Es obligatorio entregar antes de abandonar el examen. 4. Tiempo disponible: 2 horas y 30 minutos. 5. Este examen consta de 4 ejercicios, que deberán entregarse en hojas separadas. 6. En caso de no haber realizado un ejercicio se entregará una hoja en blanco con el nombre y apellidos. 7. Las calificaciones obtenidas en este examen, junto con las de la práctica se publicarán en el tablón de la asignatura el jueves 9 de diciembre a las 13:00 horas. 8. Las revisiones se realizarán el martes 14. La hora en concreto del inicio de la revisión se publicará el día 14 junto con las calificaciones. EXAMEN Ejercicio 1 (2,75 puntos) Dado el alfabeto = {a,b}, Se pide: 1. Obtener un AFD que reconozca el lenguaje L formado por las palabras que tienen al menos un símbolo b y que no tienen dos símbolos a de forma consecutiva. Por ejemplo, pertenecen a L las palabras: b, ab, aba, babbabab, bbb. Por el contrario no pertenecen a L: ε, a, aaa, baaba, baaab. (0,75 puntos) 2. Aplicar el algoritmo de minimización al autómata obtenido en el apartado anterior. Deberán figurar en la solución todos los pasos dados con el algoritmo, incluso en el caso de que el AFD propuesto en el apartado 1 ya sea mínimo. (0,5 puntos) 3. Obtener una gramática de tipo 3 que genere L. (0,25 puntos) 4. A partir del AFD obtenido en el apartado 2 (en caso de no haberlo realizado, partir del obtenido en el apartado1) se obtendrá una expresión regular equivalente. Para ello, en primer lugar se plasmará el AFD en forma de ecuaciones, y a continuación se resolverán las mismas hasta llegar a la expresión regular resultante. (0,75 puntos) 5. Obtener un AFD para el lenguaje complementario a L. Explicar cómo se ha obtenido. (0,5 puntos) Nota: En los apartados 2 y 4 se valorará el conocimiento que tiene el alumno de los correspondientes algoritmos. Por tanto, deberán aparecer en la solución los pasos que se den con el algoritmo de forma detallada. En otro caso, se considerará que la solución es incorrecta. Ejercicio 2 (2,25 puntos) Dado el alfabeto = {a, b}, sea el siguiente lenguaje formal: L = {an | n>0} U {anbm | n>0; m>=n} Por ejemplo, pertenecen a este lenguaje las palabras : a, aaaa, ab, aaabbbbb. Por el contrario, no pertenecen a L las palabras: ε, b, aba, ba, aaaabb Se pide: 1. Obtener una gramática independiente del contexto que genere L. (1 punto) 2. Obtener un autómata de pila que reconozca L. Para ello, será obligatorio plasmar la solución mediante 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 en la solución si el autómata reconoce por vaciado de pila o por estado final, así como si es determinista o no (1,25 puntos) Ejercicio 3 (3 puntos) La definición de un lenguaje se compone de dos tipos de elementos: directivas e instrucciones de ensamblador, elementos que podrán estar mezclados de todas las formas posibles pudiendo no existir ninguno y, estando separados por el símbolo “;”. Las directivas sirven para informar al ensamblador de distintos aspectos del programa. El formato de las mismas es el siguiente: ETIQUETA DIRECTIVA OPERANDO La etiqueta será obligatoria, es decir, toda directiva llevará siempre una etiqueta. El lenguaje permite dos directivas: DS y DC. Ambos tipos de directivas llevan un operando que será siempre una expresión aritmética. Las instrucciones permiten realizar operaciones del ensamblador y tienen el siguiente formato: ETIQUETA INSTRUCCIÓN OPERANDOS A diferencia de las directivas, la etiqueta no es obligatoria en las instrucciones. Existen dos tipos instrucciones: MOVE, ADD. La instrucción MOVE sirve para mover datos de un origen a un destino, por lo tanto tendrá dos operandos separados por el símbolo “,”. El operando origen, que será el primero, puede ser una expresión aritmética o un registro de datos, mientras que el segundo operando (destino) será un registro de datos. MOVE origen , destino La instrucción ADD se utiliza para sumar datos. Está formada por dos o más sumandos finalizando con el operando destino del resultado, tanto los sumandos como el operando destino están separados por el símbolo “,”. Los sumandos de la instrucción ADD son expresiones o registros de datos, mientras que destino es un registro de datos. ADD sumando1, sumando2,…, destino Las expresiones utilizadas tanto en las directivas como en las instrucciones tienen las siguientes características: 1. 2. Operandos: constantes enteras y etiquetas. Operadores: Binarios:‘+’ (suma), ‘-‘ (resta), ‘*’ (producto), ‘/’ (cociente) Unarios:‘-‘ (signo) 3. Todos los operadores binarios tienen asociatividad a la izquierda. 4. La precedencia de los operadores es la siguiente: primero se hacen los operadores unarios, después vienen los operadores ‘*’ seguidos de ‘/’, y finalmente los últimos operadores en realizarse con la menor precedencia son: ‘+’ (suma) y ‘-’ (resta). 5. El operador unario ‘-‘, de existir, irá siempre delante del operando. Además, se podrá anidar. Por ejemplo, es válido - - - aux y ---(x+1) 6. Finalmente, en las expresiones pueden aparecer paréntesis, teniendo en este caso los paréntesis la máxima prioridad. Los paréntesis pueden aparecer anidados. Ejemplo de programa fuente Etq1 DS 2*a+D3 ; MOVE 7 , D2 ; ADD 3+a , D2 , etq2*4+b , D9 Se pide: Teniendo en cuenta que el léxico = { cte_ent,etiqueta, reg_datos, DS, DC, MOVE, ADD , ‘;’, ‘,’, ‘+’, ‘-‘, ‘*’, ‘/’, ‘(‘, ‘)’}, definir la sintaxis anterior utilizando la notación BNF o EBNF Nota: Debe especificar de forma clara en la solución la notación (BNF o EBNF) que se empleará. Ejercicio 4 (2 puntos) Sea el alfabeto = {a, b, c}, sobre el que se define la siguiente gramática: S ---> A$ A ---> BAc | aB | ε B -- -> Bb | bb | A Se pide: 1. Sin modificar la gramática dada calcular los símbolos directores de todas sus producciones. (1,5 puntos) 2. La definición del símbolo no terminal B contiene una recursión inmediata por la izquierda, que es incompatible con la condición LL(1). Aplicando el algoritmo visto en clase, obtener una nueva definición para B que no contenga recursión inmediata por la izquierda. (0,5 puntos) Nota1: el cálculo de directores deberá figurar de forma detallada en función de los iniciales y seguidores correspondientes. Nota2: no se modificará la definición del símbolo S ni de A en el apartado 2.