Licenciatura en Sistemas de Información
UNSE – FCEyT
PROGRAMACIÓN II – AÑO 2011 TALLER 3: CONSTRUCCIÓN DE COMPILADORES
1. DESCRIPCIÓN Este taller consta de dos partes. En cada una de ellas se especifican: Actividades a realizar Material bibliográfico y /o fuentes de información – consulta
Se complementa con los ejercicios planteados en el “Cuadernillo de Ejercicios de Aplicación” 2. OBJETIVOS Que el estudiante logre: Conocer los conceptos fundamentales del diseño y construcción de compiladores Conocer los problemas concretos que surgen durante el desarrollo de programas traductores. Reforzar, desde el punto de vista práctico, los conocimientos adquiridos sobre analizadores lexicográficos, sintácticos y estructura de programas traductores. Capacidad para construir compiladores/intérpretes sencillos.
3. PRODUCTO ESPERADO Informe escrito individual con las respuestas requeridas en cada una de las partes. CD con el programa solicitado.
4. CRITERIOS DE EVALUACIÓN La evaluación dependerá del producto entregado en tiempo y en forma. Se analizará: Presentación Completitud
Para la actividad I del Apartado B, se analizará: -
Correcto funcionamiento del programa.
Correcta especificación de las expresiones regulares y de la gramática del lenguaje.
5. FECHA DE PRESENTACIÓN: 30/11/2011
PARTE A Consignas: realice los ejercicios propuestos Material de consulta: Aho, Alfred; Ullman, Jeffrey y Sethi, Ravi; "COMPILADORES, PRINCIPIOS, TECNICAS Y HERRAMIENTAS". Editorial Addison Wesley Iberoamericana. 1986.
1. Determine si las siguientes proposiciones son verdaderas (V) o falsas (F). Justifique su respuesta. 1.1. Sea la gramática: SPnnnnCg Pf|h Cg|fC La siguiente tabla corresponde al analizador sintáctico LL:
1.2. El análisis sintáctico ascendente corresponde con un recorrido prefijo del árbol de análisis sintáctico (primero se expande el nodo que se visita y luego se procesan los hijos) y el análisis sintáctico descendente corresponde con un recorrido postorden del árbol (primero se reconoce los hijos y luego mediante una
TALLER 4: CONSTRUCCIÓN DE COMPILADORES_____
________________________________
2
reducción se reconoce el padre). 1.3. Un error léxico se producen cuando el compilador espera un símbolo terminal en cierta posición de la gramática que no corresponde con el que se acaba de leer. Por ejemplo, en una expresión aritmética con paréntesis no equilibrados.
1.4. A los atributos asociados a los símbolos no terminales de la parte izquierda de las reglas de producción cuyo valor se calcula en función del valor de los atributos de sus hijos se les denomina atributos heredados.
1.5. Las cuádruplas facilitan la aplicación de muchas optimizaciones, pero hay que tener un algoritmo para la reutilización de las variables temporales (reutilización de registros del procesador).
1.6. Una de las condiciones que se debe cumplir es que el código optimizado se comporte lo más parecido posible al código de partida y que sea más rápido o que ocupe menos espacio.
1.7. La tabla se símbolos se usa para anular la visibilidad de los símbolos.
1.8. El hecho de que haya un conflicto desplazamiento-reducción cuando se está analizando una hilera, indica que la hilera tiene errores de sintaxis.
1.9. El Analizador del Código Fuente es independiente de la máquina, mientras que el Generador del Código Objeto necesita producir un código diferente para cada tipo de máquina, y es así dependiente de la máquina.
1.10. El análisis semántico y la generación de código se basan en la estructura del árbol de análisis sintáctico.
2. Marque la o las opciones correctas. Justifique su respuesta. 2.1. El analizador léxico suele ser una subrutina del analizador sintáctico. Marque cuáles son las razones para su independencia: Se simplifica el diseño del analizador sintáctico. Se consigue un compilador más eficiente Se puede describir los símbolos que trata el analizador léxico con el mismo tipo de gramática que el analizador sintáctico, lo que facilita su compatibilidad y por lo tanto su independencia Añade portabilidad al compilador: independencia del alfabeto. 2.2. A la siguiente expresión c = - a * ( 3 + b ) le corresponde el código de tres direcciones:
a) temp0 = 3 temp1 = temp0 + b temp2 = a * temp1 temp3 = - temp2 c = temp3
b) temp0 = 3 temp1 = temp0 + b temp2 = a * temp1 c = - temp2
c) temp0 = 3+ b temp1 = a * temp0 temp2 = - temp1 c = temp2
2.3. El método de análisis sintáctico por desplazamiento y reducción, es utilizado:
a) por cualquier analizador b) por los analizadores LR c) sólo por los analizadores por precedencia de operadores 2.4. Dada la siguiente gramática y la tabla de análisis LALR correspondiente
TALLER 4: CONSTRUCCIÓN DE COMPILADORES_____
________________________________
3
¿En qué estado estará el analizador sintáctico después del desplazamiento de los tres primeros símbolos de la cadena aaxbb$? (En la tabla, acc significa aceptar, dn significa desplazamiento a n, rn significa reducción de n). 5_7 10_12 2 4 2.5. A la gramática
EEvC/C CC^L/L L ¬ L / true / false / ( E )
le corresponden los conjuntos “primeros” y “siguientes”: Prim (E) Prim(C) Prim (L) a) ¬, true, false, (, ^, v ¬, true, false, (, ^ ¬, true, false, ( b) v ^ ¬, true, false, ( c) ^, v ¬, true, false, (, ^ ¬, true, false, (
Sig (E) $, v, ) $, v, ^ $, )
Sig (C) $, v, ), ^ v, ), ^ $, v, ), ^
Sig (L) $, v, ), ^ v, ), ^ $, v, ), ^
PARTE B Consignas: realice la actividad propuesta Material de consulta: Aho, Alfred; Ullman, Jeffrey y Sethi, Ravi; "COMPILADORES, PRINCIPIOS, TECNICAS Y HERRAMIENTAS". Editorial Addison Wesley Iberoamericana. 1986. Sitios web de Internet
Construcción de un intérprete sencillo 1) 2)
Diseñe un lenguaje que permita el ingreso de una expresión aritmética infija y la convierta en otra en notación posfija. Tenga en cuenta lo siguiente: Los operadores aritméticos son: *, /, + y -. Los operandos pueden ser constantes enteras o identificadores. Admita el uso de paréntesis. Muestre por pantallas el resultado de las operaciones, o sea, la expresión en notación posfija. Construir el programa utilizando los generadores Lex y Yacc.