Traductores, Compiladores e Intérpretes

  • Tema inicial

    Compilador ideal

    SERGIO GÁLVEZ ROJAS

     

    Departamento: Lenguaje y Ciencias de la Computación

    Universidad de Málaga.

    Área de conocimiento: Lenguajes y Sistemas Informáticos.


    Nivel:  Tercero.


    Fecha de la última revisión: febrero de 2013.

    Compilador ideal by Wikipedia (CC BY-SA 3.0) 

    Horas de clase de teoría:   30      Horas de clase de práctica:  15
    Tiempo total previsto de aprendizaje:  90

    Período de publicación de la asignatura: Cursos 2002/03 al 2011/12



    OBJETIVOS: CONOCIMIENTOS Y CAPACIDADES. COMPETENCIAS

    Competencias transversales/genéricas

    La Programación es la base de la Informática actual desde el punto de vista del Software. Por ello una asignatura como ésta dota al alumno de una visión general de todos los aspectos de la Informática que se ven influenciados por el uso de los lenguajes de programación. No es, por tanto, una asignatura Transversal General sino Específica en el campo de la Informática.


    Competencias especificas

    El alumno deberá aprender el funcionamiento básico de un compilador y de un intérprete, las fases que lo componen y los objetivos de cada una. Asimismo, debe darse cuenta de las relaciones entre cada fase y la siguiente, así como entre cada fase y los recursos de la plataforma informática a la que va destinada el traductor.
    El alumno hará uso de conceptos de asignaturas anteriores para comprender la importancia de las estructuras de datos de alto rendimiento, así como de las estructuras básicas de control computacional.

    El alumno deberá ser capaz de diseñar lenguajes de programación mediante reglas de producción y diagramas de sintaxis, así como trocear las cadenas de entrada a reconocer sintácticamente y a comunicar las dos primeras fases de la etapa de análisis.
    También deberá conocer los distintos tipos de análisis sintáctico existentes y sus limitaciones dentro de la teoría de los lenguajes formales y de autómatas finitos deterministas.
    Por último, aprenderá las reglas básicas que rigen el funcionamiento de las gramáticas atribuidas y de los esquemas de traducción, lo que abrirá las puertas a un nuevo mundo en el control y manipulación de los lenguajes generados por gramáticas formales. A este respecto deberá saber aplicar ciertos patrones comunes en el uso de atributos y de acciones semánticas asociadas a las reglas de producción de una gramática. En resumen:

    - Saber plantear soluciones algorítmicas a problemas concretos.
    - Visualizar e interpretar adecuadamente soluciones ya dadas.
    - Diseñar e implementar algoritmos ad hoc.
    - Adapatarse al diseño construido por otros grupos de trabajo.
    - Identificar, localizar y corregir errores.
    - Conectar los aspectos vistos en teoría con la práctica en ordenador.
    - Utilización de herramientas (Lex y Yacc).


    Objetivos

    Introducir al alumno en las técnicas de compilación de lenguajes de programación, fundamentalmente imperativos. Aplicaciones generales de dichas técnicas. Estudio de las fases y componentes del proceso de compilación. El alumno deberá ser capaz de:

    - Realizar pequeños compiladores que generen código intermedio convertible a ensamblador.
    - Realizar intérpretes de comandos.
    - Analizar y resolver problemas a los que sean aplicables las técnicas propias de la compilación.
    - Confeccionar analizadores sintácticos y lexicográficos en entornos software que carezcan de herramientas de generadores automáticos.

     

    METODOLOGÍA

    Las clases serán minoritariamente de pizarra, en las que se explicarán los conceptos fundamentales, instando a la participación del alumno para que sus razonamientos evolucionen a la vez que los conceptos explicados. La mayor parte de las clases teóricas se realizarán con apoyo de ordenador en el que se podrá observar la creación progresiva de pequeños intérpretes que solucionan cada uno de los problemas parciales de los que consta la creación de un compilador.

    Los ejemplos y clases prácticas se verán apoyados por elementos visuales, fundamentalmente cañón de proyección, con el que se explicarán casos prácticos en los que intervienen los conceptos teóricos. Los ejemplos se harán por entero en tiempo real en la propia clase, de forma que el alumno pueda apreciar el orden en que se construye un compilador o intérprete:

    - Determinación informal de programas de ejemplo a reconocer por nuestro traductor.
    - Creación de una gramática de contexto libre acorde al lenguaje a reconocer. 
    - Creación de árboles sintácticos que reconozcan sentencias de ejemplo.
    - Asociación de atributos a los distintos componentes de la gramática.
    - Creación de la estructura de la Tabla de Símbolos.
    - Creación del Analizador Léxico y sus acciones léxicas asociadas.
    - Adición de reglas semánticas al Analizador Sintáctico en el orden en que las reglas de producción se reducen.


    Estos programas hechos en la propia clase se darán a los alumnos mediante el Campus Virtual de la asignatura, Campus que se utilizará asiduamente a lo largo de todo el curso para proporcionar material e información de todo tipo. Asimismo, se emplearán programas de apoyo mediante los cuáles puede observarse visualmente el funcionamiento de analizadores sintácticos (ANAGRA) y cómo construir diagramas de sintaxis y convertirlos posteriormente a un analizador escrito en C (MEDISE).
    Una o dos veces por semana se propondrá a los alumnos una tarea relacionada con el temario impartido durante las últimas clases. Mediante estas tareas se desea conseguir una participación activa del alumnado. Se procurará que dichas tareas se encuentren fuertemente acopladas a los pormenores explicados en clase de manera que su correcta resolución sólo pueda conseguirse mediante una asistencia regular a las clases presenciales. Estos trabajos tratarán sobre los temas principales y anejos al temario oficial y servirán para reforzar conocimientos y mantener más vivo el interés del alumno en la asignatura.


    Es especialmente importante al principio de la asignatura que el alumno comience a manejar las herramientas informáticas necesarias para construir un compilador de un lenguaje imperativo sin demasiadas dificultades. Por ello se hará especial hincapié en que asistan a las tutorías para resolver cualquier duda. El horario y celebración de las tutorías quedará prefijado de antemano al principio de curso. Igualmente se hará uso de los medios proporcionados por la ETSI Informática (apoyo de alumnos veteranos) para que aconsejen y ayuden a los alumnos de la asignatura en cualquier otro aspecto relevante para la adquisición de los conocimientos necesarios.


    También se suministrarán a los alumnos copias de versiones gratuitas de metacompiladores, para que puedan manipular en la práctica todos los ejercicios propuestos, así como los resueltos en clase.


    Igualmente se proporcionarán todos los enunciados de los exámenes de cursos pasados, así como sus soluciones prácticas, con el objetivo de que el alumno pueda abordarlos como ejercicios y poder comparar sus resultados con los correctos.

     

    MATERIAL DE CLASE

    1. Libro de la asignatura

    2. Ejercicios y exámenes resueltos 

    3. Herramientas PCLex/PCYACC

    4. MEDISE

    5. ANAGRA

     

    CRITERIOS DE EVALUACIÓN Y DE CALIFICACIÓN. ACTIVIDADES DE EVALUACIÓN O TAREAS PRÁCTICAS 

    La evaluación se hará mediante una evaluación continua que consta de dos bloques:


    1.- Tareas semanales.

    Una o dos veces por semana se propondrá a los alumnos una tarea relacionada con el temario impartido durante las últimas clases.
    Mediante estas tareas se desea llevar un control de la participación activa del alumnado y de su asistencia real a clase. Se procurará que dichas tareas se encuentren fuertemente acopladas a los pormenores explicados en clase, de manera que su correcta resolución sólo pueda conseguirse mediante una asistencia regular a las clases presenciales.
    Este bloque tiene por objetivo subir la calificación general obtenida en el bloque siguiente y, por tanto, incentivar la asistencia a clase. La proporción en que esta calificación influya en la nota final depende tanto de la calidad como de la cantidad de ejercicios abordados por el alumno.
    Estos trabajos tratarán sobre los temas principales y anejos al temario oficial y servirán para reforzar conocimientos y mantener más vivo el interés del alumno en la asignatura.


    2.- Evaluación continua.

    Este bloque constará de tres pruebas a realizar durante el periodo lectivo, toda vez que se hayan suministrado al alumno los conocimientos o medios necesarios para su total superación. Las pruebas serán prácticas y podrán ser realizadas tanto en laboratorio, en casa o en el aula de teoría, ya que se tratará de escribir programas en Lex/Yacc.
    Con objeto de que el alumno conozca lo más rápidamente posible la calificación obtenida, planteamos la posibilidad de utilizar la plataforma SIETTE en su versión más actual. Aunque SIETTE era originalmente una plataforma para realizar tests, la última versión permite plantear enunciados al alumno a los cuales éste debe responder con programas completos, encargándose el propio sistema de pasar a dichos programas una batería completa de pruebas y asignarle una puntuación automática en función de las pruebas que haya podido superar. Si la plataforma está lo suficientemente madura desde un punto de vista tecnológico, consideraremos su utilización, previa comunicación y formación a los alumnos sobre su funcionamiento.
    Las tres pruebas tendrán un peso del 20%, 30% y 50% sobre la calificación final y versarán sobre Lex, Yacc ampliado (análisis sintáctico y gestión básica de atributos) y Yacc avanzado, respectivamente. Se realiza la media ponderada de los tres ejercicios y el resultado, junto con la estimación del bloque anterior, da lugar a la calificación final.
    Para aprobar la asignatura es necesario obtener una media del 50% de los puntos de dichos parciales. En cualquier caso, y especialmente si el alumno no supera dicho 50%, si alguna de estas tres pruebas no es superada satisfactoriamente, el alumno dispondrá de una segunda oportunidad para superarla el día del examen final oficial. 

    • Tema 9: Gestión de la memoria en tiempo de ejecución

    • Bibliografía

       BIBLIOGRAFÍA BÁSICA


      • BB-B-001. Aho A., Lam M., Sethi R., Ullman J. "Compilers: Principles, Techniques and Tools", Addison-Wesley 2006
      • BB-B-002. Bennet J.P. "Introduction to compiling techniques. A first course using ANSI C, LEX and YACC", McGraw-Hill 1990
      • BB-B-003. Holub A. "Compiler design in C", Prentice-Hall 1990
      • BB-B-004. Louden K.C. "Construcción de compiladores", Thomson 2004
      • BB-B-005. Garrido A., Iñesta J.M., Moreno F., Pérez J.A. "Diseño de compiladores", Wiley 1981

       

       BIBLIOGRAFÍA COMPLEMENTARIA

        

      • BC-B-001. Tremblay J.P., Sorenson P.G. "The theory and practice of compiler writing", McGraw-Hill 1985
      • BC-B-002. Mak R. "Writing compilers and interpreters", John Wiley & Sons 2009
        • PROFESORADO

        • Propiedad intelectual

          Copyright 2012, autores y colaboradores. Reconocer autoría/Citar obra: GÁLVEZ, S. (2012). Traductores, Compiladores e Intérpretes. Retrieved [fecha de hoy], from OCW Universidad de Málaga Web site: http://ocw.cv.uma.es/course/view.php?id=61

          Esta obra se publica bajo una licencia Licencia Creative Commons CC by NC SA