PROCESADORES DE LENGUAJE. Teoría 4º Curso Ingeniería Informática Mayo-2011 Tiempo: 2:30 horas No se permiten libros ni apuntes. Tiempo: 2 hora 30 min. FINAL: Contestad a las preguntas 1,2,3,5. SEGUNDO PARCIAL: Contestad a las preguntas 2,3,4,5. Pregunta 1) Supongamos que se nos pide diseñar el modulo de reconocimiento figuras en un programa de diseño gráfico por ordenador. El sistema posee un modulo de procesamiento de imágenes cuya entrada es una imagen de un plano y la salida es una serie de elementos rectilíneos y curvilíneos, que llamaremos primitivas, y que forman las figuras. Las operaciones que se pueden realizar con estas primitivas son: el operador suma +, que permite la concatenación de dos primitivas, y el operador rotación , que permite un giro de un ángulo de 180 grados. Supongamos que estas primitivas se pueden combinar con la siguiente gramática: Figura Union Union Union + Union | Union | Primitiva Primitiva up | left | top | bottom a) Diseña una gramática LL(1) donde el operador suma sea asociativo a izquierdas y el operador rotación sea asociativo a derechas. El operador suma tienen menor prioridad que la rotación. b) Construye la tabla de análisis sintáctico para la gramática LL(1). c) Reconoce la entrada up + up top + top. Indica el mensaje de error correspondiente, incluyendo lo que se ha encontrado y lo que se esperaba en el momento del error. Intenta sincronizar el analizador usando el mecanismo de recuperación en modo de pánico. Pregunta 2) ¿Es una gramática de atributos-S siempre de atributos-L? Justifica tu respuesta y pon un ejemplo. Pregunta 3) Dada la siguiente gramática para generar expresiones booleanas indica si se trata de una gramática LR(0) o/y SLR(1). Justifica por qué. E E E| E E | a | … | z Define una gramática de atributos para convertir una expresión Booleana a su forma distributiva. Es decir que las construcciones de la forma X Y Z las traduzca por XYXZ. Indica de qué tipo de atributos se tratan. Implementa la función que evalúa dicho atributo. Pregunta 4) Comenta qué se entiende por equivalencia estructural de tipos. Supongamos que se quiere establecer la equivalencia estructural entre expresiones de tipos vector. Indica como seria la función typeEqual(t1,t2:TypeExp):Boolean; para este tipo de expresiones. Indica un ejemplo de tipos vector estructuralmente equivalentes. Pregunta 5) Supongamos la construcción de los lenguajes de programación que genera un bucle mientras se cumpla una determinada condición: Stmt for ( StmtAssign ; Exp; StmtAssign ) Stmt* | epsilon a) Dibujar el diagrama de flujo de esta construcción. b) Dibujar la forma del árbol abstracto de análisis sintáctico que usarías para su traducción a código de 3-direcciones. c) Escribir el pseudocódigo de la función generar_código para traducir este tipo de sentencias a una lista de cuádruplos. D) Indica la lista de cuádruplos para el siguiente ejemplo. suma = 0; for (i = 1; i <= 10; i = i+2) suma = suma + i;