Guía docente de Procesadores de Lenguajes (Especialidad Computación y Sistemas Inteligentes) (296114A)

Curso 2023/2024
Fecha de aprobación: 26/06/2023

Grado

Grado en Ingeniería Informática

Rama

Ingeniería y Arquitectura

Módulo

Formación de Especialidad 1: Computación y Sistemas Inteligentes

Materia

Modelos de Computación

Curso

4

Semestre

1

Créditos

6

Tipo

Obligatoria

Profesorado

Teórico

Ramón López-Cózar Delgado. Grupo: A

Práctico

  • Ramón López-Cózar Delgado Grupo: 1
  • Jorge Revelles Moreno Grupo: 2

Tutorías

Ramón López-Cózar Delgado

Email
  • Primer semestre
    • Martes de 10:30 a 13:30 (Etsiit Desp. 26 3ª Planta)
    • Miércoles de 10:30 a 13:30 (Etsiit Desp. 26 3ª Planta)
  • Segundo semestre
    • Martes de 10:30 a 13:30 (Aula Inf 1 F. Bbaa)
    • Miércoles de 10:30 a 13:30 (Etsiit Desp. 26 3ª Planta)

Jorge Revelles Moreno

Email
  • Primer semestre
    • Martes de 09:30 a 11:30 (Etsiit 3ª P Despacho 4)
    • Miércoles de 09:30 a 11:30 (Etsiit 3ª P Despacho 4)
    • Jueves de 10:30 a 12:30 (Etsiit 3ª P Despacho 4)
  • Segundo semestre
    • Lunes de 09:30 a 10:30 (Facultad de Filosofía y Letras)
    • Martes de 09:30 a 13:30 (Etsiit 3ª P Despacho 4)
    • Jueves de 09:30 a 10:30 (Facultad de Filosofía y Letras)

Prerrequisitos y/o Recomendaciones

No es necesario que los alumnos tengan aprobadas asignaturas, materias o módulos previos como requisito indispensable para cursar este módulo. No obstante se recomienda la superación de los contenidos y adquisición e competencias de las materias de formación básica, de rama y de la asignatura de Modelos Avanzados de Computación.

Breve descripción de contenidos (Según memoria de verificación del Máster)

  • Fundamentos teóricos de los lenguajes de programación.
  • Arquitectura de un Procesador de Lenguaje.
  • Proceso de análisis (léxico, sintáctico y semántico).
  • Proceso de síntesis (lenguajes intermedios, organización de la memoria y generación de código objeto).

Competencias

Competencias Generales

  • CG08. Conocimiento de las materias básicas y tecnologías, que capaciten para el aprendizaje y desarrollo de nuevos métodos y tecnologías, así como las que les doten de una gran versatilidad para adaptarse a nuevas situaciones.
  • CG09. Capacidad para resolver problemas con iniciativa, toma de decisiones, autonomía y creatividad. Capacidad para saber comunicar y transmitir los conocimientos, habilidades y destrezas de la profesión de Ingeniero Técnico en Informática.

Competencias Transversales

  • CT01. Capacidad de organización y planificación así como capacidad de gestión de la Información. 
  • CT04. Capacidad de comunicación en lengua extranjera, particularmente en inglés. 
  • CT05. Capacidad de trabajo en equipo, usando competencias demostrables mediante la elaboración y defensa de argumentos. 
  • CT06. Motivación por la calidad y la mejora continua, actuando con rigor, responsabilidad y ética profesional. 
  • CT08. Capacidad para proyectar los conocimientos, habilidades y destrezas adquiridos para promover una sociedad basada en los valores de la libertad, la justicia, la igualdad y el pluralismo. 

Resultados de aprendizaje (Objetivos)

  • Conocer los fundamentos teóricos de los lenguajes de programación, evolución de éstos y paradigmas.
  • Conocer el concepto de máquina virtual y de procesador de lenguaje como abstracción de un traductor.
  • Reconocer los modelos formales subyacentes tales como autómatas finitos, expresiones regulares, autómatas de pila y su relación con la definición de un lenguaje definido por gramáticas libres de contexto.
  • Conocer las fases necesarias para la construcción de un procesador de lenguaje, distinguiendo los casos particulares para un compilador o un intérprete y adquirir destreza para la aplicación del proceso de abstracción léxica para la construcción óptima de procesadores de lenguajes.
  • Ser capaces de comparar y contrastar los modelos de ejecución interpretados y compilados, estableciendo una comparativa de ambos modelos.
  • Ser capaces de usar las técnicas y herramientas automáticas para la construcción de procesadores de lenguajes.
  • Ser capaces de diseñar la etapa de síntesis (back-end) de un compilador para un lenguaje de programación, haciendo uso de las distintas técnicas explicadas y también de herramientas automáticas.
  • Ser capaces de organizar la información en la memoria en función de las características del lenguaje fuente y lenguaje objeto a la hora de construir un compilador o intérprete.
  • Ser capaces de razonar acerca de la eficacia de la optimización en generación de código objeto.

Programa de contenidos Teóricos y Prácticos

Teórico

  1. Procesadores de lenguajes.
    • Conceptos previos.
    • Aplicación de los traductores.
    • Visión general de un traductor.
    • Tipos y evolución de los traductores.
    • Arquitectura de procesadores de lenguajes.
  2. Análisis de Léxico.
    • Descripción funcional.
    • Conceptos de token.
    • Lexema y patrón.
    • Fundamentos: álgebra de lenguajes.
    • Tratamiento de errores.
  3. Análisis Sintáctico
    • Descripción funcional
    • Fundamentos. Gramática libres de contexto
    • Métodos de análisis sintáctico descendentes
    • Métodos de análisis sintáctico ascendentes
    • Detección y recuperación de los errores.
  4. Análisis Semántico
    • Descripción funcional
    • Tablas de símbolos
    • Gramática con atributos
    • Comprobaciones semánticas.
  5. Generación de Código Intermedio.
    • Lenguaje intermedio y tipos de lenguajes intermedios
    • Lenguaje intermedio de cuartetos. Proposiciones
    • Generación de código en cuartetos
    • Máquinas abstracta.
  6. Organización de la Memoria.
    • Introducción a la gestión de memoria.
    • Organización de la memoria durante la ejecución.
    • Organización estática.
    • Organización dinámica basada en pila (stack).
    • Organización dinámica basada en montículo (heap).
    • Mecanismos de paso de parámetros.
  7. Intérpretes.
    • Función del intérprete.
    • Intérpretes iterativos.
    • Intérpretes recursivos.
  8. Generación de Código Objeto
    • Bloques básicos.
    • Generador de código simple.
    • Representación de bloques básicos con GDA (Gráfos dirigidos acíclicos).
    • Generadores de generadores de código (GGC).
  9. Optimización de Código.
    • Descripción funcional.
    • Tipos de optimizadores.
    • Organización de los compiladores optimizados.
    • Principales fuentes de optimización.
    • Análisis global del flujo de datos.

Práctico

  • Seminario práctico 1: Utilización del Lex/Flex.
  • Seminario práctico 2: Utilización del Yacc/Bison.
  • Seminario práctico 3: Introducción de acciones semánticas en Yacc/Bison.
  • Práctica 1. Especificación y diseño de un lenguaje orientado al problema.
  • Práctica 2. Implementación del analizador léxico usando Lex/Flex.
  • Práctica 3. Implementación del analizador sintáctico usando Yacc/Bison.
  • Práctica 4. Implementación del analizador semántico.
  • Práctica 5. Implementación del generador de código intermedio.

Bibliografía

Bibliografía fundamental

  • Alfred V. Aho, M.S. Lam, R.Sethi, J.D. Ullman. Compiladores. Principios, Técnicas y Herramientas. 2ª Ed. Addison Wesley 2008.
  • Kenneth C. Louden. Construcción de Compiladores. Thomson 2004.

Bibliografía complementaria

  • J.P. Tremblay, P.G. Sorenson. The Theory and Practice of Compiler Writing. McGraw-Hill 1985.
  • M. Alfonseca, M. de la Cruz, A. Ortega, E. Pulido. Compiladores e Intérpretes: Teoría y Práctica. Pearson Ed. 2006.

Enlaces recomendados

Metodología docente

  • MD01. Lección Magistral (Clases Teóricas-Expositivas) 
  • MD02. Actividades Prácticas (Resolución de Problemas, Resolución de Casos Prácticos, Desarrollo de Proyectos, Prácticas en Laboratorio, Taller de Programación, Aula de Informática, Prácticas de Campo). 
  • MD03.  Seminarios (Debates, Demos, Exposición de Trabajos Tutelados, Conferencias, Visitas Guiadas, Monografías). 
  • MD04. Actividades no presenciales Individuales. 
  • MD05. Actividades no presenciales Grupales. 
  • MD06. Tutorías Académicas. 

Evaluación (instrumentos de evaluación, criterios de evaluación y porcentaje sobre la calificación final)

Evaluación Ordinaria

Se utilizarán alguna o algunas de las siguientes técnicas de evaluación:

  • Para la parte teórica se realizará un examen parcial que corresponderá a la primera mitad del temario, y un examen final en el que entrará la segunda parte del temario, más la primera parte de éste, en caso de no haberse aprobado el examen parcial. La ponderación de este bloque será de 50% para el examen parcial, y de 50% para el examen final.
  • Para la parte práctica se realizarán prácticas de laboratorio, resolución de problemas y desarrollo de proyectos (individuales o en grupo), y se valorarán las entregas de los informes/memorias realizados por los alumnos, o en su caso las entrevistas personales con los alumnos y las sesiones de evaluación. La ponderación de este bloque será de 30%. De forma optativa, los alumnos podrán realizar hasta dos prácticas adicionales, en cuyo caso, la ponderación de este bloque será de 50%.
  • También se tendrá en cuenta el trabajo autónomo de los alumnos, la asistencia a los seminarios que, en su caso, se puedan organizar, y la presentación oral de los trabajos desarrollados por los alumnos. La ponderación de este bloque será de hasta el 1 punto, sobre 10, a sumar a la nota final

La calificación global corresponderá por tanto a la puntuación ponderada de los diferentes aspectos y actividades que integran el sistema de evaluación. Por tanto, el resultado de la evaluación será una calificación numérica obtenida mediante la suma ponderada de las calificaciones correspondientes a una parte teórica, una parte práctica y, en su caso, una parte relacionada con el trabajo autónomo de los alumnos, los seminarios impartidos y el aprendizaje basado en los proyectos. En cualquiera de los caso la puntuación final no podrá ser superior a 10.

Todo lo relativo a la evaluación se regirá por la normativa sobre planificación docente y organización de exámenes vigente en la Universidad de Granada.

El sistema de calificaciones se expresará mediante calificación numérica de acuerdo con lo establecido en el art. 5 del R. D 1125/2003, de 5 de septiembre y por la normativa de evaluación aprobada por la Universidad de Granada, por el que se establece el sistema europeo de créditos y el sistema de calificaciones en las titulaciones universitarias de carácter oficial y validez en el territorio nacional.

Evaluación Extraordinaria

La evaluación extraordinaria estará formada por todas aquellas pruebas que el profesor estime oportunas, de forma que se pueda acreditar que el alumno ha adquirido la totalidad de las competencias generales y específicas descritas en el apartado correspondiente de esa Guía Docente. En este caso, la ponderación será del 70% para la parte teórica junto a los problemas y del 30% para la parte práctica. Para la nota de la práctica podrá optar por la nota conseguida durante el curso o por volver a examinarse de la práctica realizada.

Evaluación única final

Para los alumnos que se acojan a la evaluación única final, esta modalidad de evaluación estará formada por todas aquellas pruebas que el profesor estime oportunas, de forma que se pueda acreditar que el alumno ha adquirido la totalidad de las competencias generales y específicas descritas en el apartado correspondiente de esa Guía Docente. En este caso, la ponderación será del 70% para la parte teórica junto a los problemas y del 30% para la parte práctica. Para el examen de la práctica el alumno debe haber solicitado la asignación de una práctica si no ha tenido asignada alguna durante el curso y presentar la misma.

Información adicional

Definición de grupo grande y grupo pequeño:

  • Los grupos grandes son grupos de 45 a 60 estudiantes.
  • Los grupos pequeños son grupos de 15 a 20 estudiantes