Última actualización: 10/07/2020


Curso Académico: 2020/2021

Procesadores del Lenguaje
(13890)
Titulación: Grado en Ingeniería Informática (218)


Coordinador/a: GARCIA HERRERO, JESUS

Departamento asignado a la asignatura: Departamento de Informática

Tipo: Optativa
Créditos: 6.0 ECTS

Curso:
Cuatrimestre:




Requisitos (Asignaturas o materias cuyo conocimiento se presupone)
Programación Tería de Autómatas y Lenguajes Formales
Competencias Transversales/Genéricas: - Capacidad de análisis y síntesis (PO a) - Capacidad de organizar y planificar (PO c, e) - Resolución de problemas (PO c) - Trabajo en equipo (PO d) - Capacidad de aplicar los conocimientos en la práctica (PO a, c) Competencias Específicas: - Cognitivas (Saber) 1. Conocimiento sobre la teoría formal de autómatas y lenguajes formales (PO a) 2. Conocimiento sobre las técnicas de análisis léxico, sintáctico y semántico (PO a) 3. Técnicas para la generación de código (PO c) 4. Técnicas para la recuperación de errores (PO c) 5. Conocimiento de los métodos de optimización de código (PO a, c) - Procedimentales/Instrumentales (Saber hacer) 1. Diseño de una gramática formal (PO c) 2. Diseñar un analizador léxico y un analizador sintáctico (PO c) 3. Usar herramientas automáticas de generación de analizadores (PO k) - Actitudinales (Ser) (PO a, c, d) 1. Capacidad para generar nuevas ideas (creatividad) 2. Preocupación por la calidad 3. Motivación de logro 4. Interés por investigar y buscar soluciones a nuevos problemas Competencias básicas establecidas en el artículo 3 sobre competencias RD 1393/2007 modificado por el RD 861/2010 en el que se indica que se garantizarán, como mínimo las siguientes competencias básicas, en el caso del Grado, y aquellas otras que figuren en el Marco Español de Cualificaciones para la Educación Superior, MECES CECC2. Capacidad para conocer los fundamentos teóricos de los lenguajes de programación y las técnicas de procesamiento léxico, sintáctico y semántico asociadas, y saber aplicarlas para la creación, diseño y procesamiento de lenguajes.
Descripción de contenidos: Programa
Descriptores: Representación de lenguajes, Análisis léxico, Análisis sintáctico, Análisis Semántico, Generación de código, Recuperación de errores, Optimización de código TEMA I: Introducción Historia de los compiladores y lenguajes Conceptos básicos Lenguajes y Gramáticas Definiciones formales de Gramática, Expresiones Regulares y Autómata Fases y estructura de un compilado Diagramas de Tombston TEMA II: Análisis Léxico Diseño de un Analizador Léxico Autómatas Finitos reconocedores de Lenguajes Regulares Construcción de un Autómata Finito. Ejemplos Generadores Automáticos de Analizadores Léxicos: LEX Manejo de Errores Léxicos TEMA III: Análisis Sintáctico Introducción al Análisis Sintáctico Clasificación de los métodos de Análisis Sintáctico Análisis Descendente, Análisis Sintáctico LL Obtención de la tabla LL(1). Ejemplos Análisis Ascendente, Análisis Sintáctico LR Tratamiento de Gramáticas Ambiguas. Ejemplos Generadores automáticos de Analizadores Sintácticos: YACC TEMA IV: Tratamiento de Errores Sintáctico Errores. Estrategias de Detección y Recuperación. Ejemplos Recuperación con diferentes analizadores Analizador descendente L Analizador ascendente de precedencia de operador Analizador ascendente L TEMA V: Análisis Semántico Gramáticas de Atributos, Ejemplos, Formalización Especificación de un traductor: Traducción Dirigida por Sintaxis y Esquemas de Traducción Evaluación de gramáticas Construcción de árboles de sintaxis abstracta TEMA VI: Verificación de Tipo Introducció Expresiones de tipo Sistemas de tipos. Comprobación estática y dinámico Ejemplo de construcción y verificación de tipos sencillo Equivalencia de expresiones de tipos Sobrecarga y Orientación a Objetos TEMA VII: Generación de Código Intermedio Tipos de Lenguajes Intermedios Códigos de tres direcciones. Alternativas Generación de código intermedio: declaraciones, expresiones aritméticas, arrays Sentencias de flujo de control TEMA VIII: Generación de Código Máquina Código máquina y máquina objetivo Opciones de código máquina Instrucciones y direccionamiento y coste Generación simple de código a partir de lenguaje intermedio Bloques básicos y grafos de flujo Asignación de registro Traducción de otras instrucciones TEMA IX: Tabla de Símbolos y Entorno de Ejecución Asignación de memoria Asignación estática y dinámica Gestión de pila y montículo. Ejemplos Llamadas a funciones Registros de activación Paso de parámetros Operaciones y organización de la tabla de símbolos TEMA X: Optimización de Código Concepto de Optimización de código Optimización local sobre bloques básicos Transformaciones que preservan la función Eliminación de código inactivo Optimización de bucles Análisis global del flujo de datos TEMA XI: Aspectos Específicos Otros procesadores de lenguajes Intérpretes Preprocesadores y macroprocesadores Diseño de lenguajes Estructuras de datos y de control Aspectos de compilación para tipos específicos de lenguajes Algunos ejemplos de compiladores
Actividades formativas, metodología a utilizar y régimen de tutorías
Clases Teóricas: 1.5 ECTS. Tienen por objetivo alcanzar las competencias específicas cognitivas de la asignatura. (PO a, c) Clases Prácticas: 1.5 ECTS. Desarrollan las competencias específicas instrumentales y la mayor parte de las transversales, como son la de trabajo en equipo, capacidad de aplicar los conocimientos a la práctica, de planificar y organizar y de análisis y síntesis. También tienen por objetivo desarrollar las capacidades específicas actitudinales. Consisten en el diseño y desarrollo de un proyecto de compilador/intérprete elaborado en grupos de trabajo (PO c, d, e, g, k) Realización de Actividades Académicas Dirigidas - Con presencia del profesor: 1 ECTS Planteamiento de un estudio, orientado por el profesor pero propuesto por el alumno, donde profundiza sobre algún aspecto de la materia, realizando una exposición pública del mismo (PO c, d, g). - Sin presencia del profesor: 1.5 ECTS. Ejercicios y lecturas complementarias propuestas por el profesor (PO a, c). Ejercicios y Examen: 0.5 ECTS. Tienen por objeto incidir y complementar en el desarrollo de las capacidades específicas cognitivas y procedimentales (PO a, c).
Sistema de evaluación
  • Peso porcentual del Examen Final 40
  • Peso porcentual del resto de la evaluación 60
Bibliografía básica
  • A. V. Aho and Ravi Sethi and J. D. Ullman. Compiladores: Principios, Técnicas y Herramientas. Addison-Wesley Iberoamericana, 1990.
  • Kenneth C. Louden. Construcción de Compiladores. Principios y práctica. Thomson, 2004.
Bibliografía complementaria
  • A. V. Aho and J. D. Ullman. Principles of Compiler Design. Addison-Wesley, Reading, Mass., 1977.
  • C. N. Fisher, R. J. Leblanc. Crafting a Compiler with C. Addison-Wesley, 1991.
  • Dick Grune, Henri E. Bal, Ceriel J.H. Jacobs, Koen G. Langendoen. Modern Compiler Design. John Wiley & Sons, 2000.
  • Doug Brown, John Levine, Tony Mason. Lex & Yacc. O'Reilly Media, Inc., 1995.
  • F. J. Sanchis and C. Galán. Compiladores: Teoría y Construcción. Paraninfo, 1986.
  • Garrido, Iñesta, Moreno, Pérez. Diseño de Compiladores. Publicaciones Universidad de Alicante, 2002.
  • K. A. Lemone. Fundamentals of Compilers: An Introduction to Computer Language Translation. CRC Press, 1992.
  • T. Pittman and J. Peters. The Art of Compiler Design: Theory and Practice. Prentice-Hall, Englewood Cliffs, New Jersey, 1992.

El programa de la asignatura y la planificación semanal podrían sufrir alguna variación por causa de fuerza mayor debidamente justificada o por eventos académicos comunicados con antelación.