Guía Docente 2020-21
ANÁLISIS LÉXICO Y SINTÁCTICO

DATOS BÁSICOS DE LA GUÍA DOCENTE:

Materia: ANÁLISIS LÉXICO Y SINTÁCTICO
Identificador: 30058
Titulación: GRADUADO EN INGENIERÍA INFORMÁTICA. PLAN 2008 (BOE 15/12/2008)
Módulo: TEORIA DE LA COMPUTACION
Tipo: OBLIGATORIA
Curso: 2 Periodo lectivo: Segundo Cuatrimestre
Créditos: 3 Horas totales: 75
Actividades Presenciales: 31 Trabajo Autónomo: 44
Idioma Principal: Castellano Idioma Secundario: Inglés
Profesor: Correo electrónico:

PRESENTACIÓN:

El objetivo del curso es el aprendizaje de soluciones a problemas encontrados en el diseño de intérpretes y compiladores de lenguajes. Desde una introducción general al estudio de compiladores e intérpretes, un estudio más detallado se enfoca al análisis del proceso de un sistema de compilación: las fases de escaneo y "parseado" del programa fuente pasando por la codificación de una representación intermedia. Las prácticas se orientan con énfasis especial en la obtención de ejemplos de analizadores léxicos y sintácticos a través de distintas técnicas y contextos. Durante las prácticas el estudiante hace uso de las competencias en programación, usando lenguaje Java.

COMPETENCIAS PROFESIONALES A DESARROLLAR EN LA MATERIA:

Competencias Generales de la titulación G02 Capacidad innovadora para proponer y encontrar formas nuevas y eficaces de realizar cualquier tarea y/ o función dentro de su entorno profesional con una elevada motivación por la calidad
G03 Capacidad para trabajar dentro de equipos multidisciplinares para conseguir metas comunes, anteponiendo los intereses colectivos a los personales
G04 Capacidad para trabajar siempre con responsabilidad y compromiso, creando un alto sentido del deber y el cumplimiento de las obligaciones
G05 Capacidad para adaptarse a diferentes entornos con una actitud positiva y optimista y orientar su conducta a la consecución de metas
G07 Capacidad para trabajar con flexibilidad y versatilidad para adaptarse a las necesidades y exigencias de su entorno profesional
G13 Capacidad para utilizar estrategias de aprendizaje individuales orientadas a la mejora continúa en el ejercicio profesional y para emprender estudios posteriores de forma autónoma
G14 Capacidad de abstracción para manejar diferentes modelos complejos de conocimiento y aplicarlos al planteamiento y resolución de problemas
G15 Capacidad para estructurar la realidad relacionando objetos, situaciones y conceptos a través del razonamiento lógico matemático
Competencias Específicas de la titulación E03 Capacidad para reconocer los principios teóricos y aplicar satisfactoriamente los métodos prácticos apropiados para el análisis y la resolución de problemas de ingeniería
E09 Capacidad para mantener las competencias profesionales mediante el aprendizaje autónomo y la mejora continua
E11 Capacidad para mantenerse al día en el mundo tecnológico y empresarial en el ámbito de las tecnologías de la informática y comunicaciones
E12 Capacidad para gestionar la complejidad a través de la abstracción, el modelado, las “best practices”, los patrones, los estándares y el uso de herramientas apropiadas
E27 Capacidad para elaborar y mantener documentación descriptiva de la génesis, producción y operatividad de los sistemas informáticos
Resultados de Aprendizaje R01 Utilizar correctamente términos técnicos relacionados con la teoría y los procesos de compilación
R02 Conocer y usar las herramientas más utilizadas para la construcción automática de compiladores
R03 Entender, crear y modificar analizadores léxicos y semánticos con la herramienta
R04 Conocer los principales ficheros de configuración de JavaCC
R05 Definir gramáticas que permitan tratar un lenguaje dado y seguir los procedimientos necesarios para implementar un compilador que reconozca dicha gramática
R06 Reconocer y diferenciar los aspectos claves de los distintos tipos de analizadores léxicos y sintácticos analizados en la materia

REQUISITOS PREVIOS:

Los alumnos deben haber cursado la materia de Lenguajes Formales, impartida en el cuatrimestre III de la titulación de Grado en Ingeniería Informática.

PROGRAMACIÓN DE LA MATERIA:

Contenidos de la materia:

1 - Introducción
    1.1 - Compiladores, intérpretes, analizadores y traductores
    1.2 - Fases del compilador
2 - Análisis léxico
    2.1 - Introducción a scanners
    2.2 - Expresiones regulares, AFD y AFN
    2.3 - Generadores de scanners
3 - Análisis sintáctico
    3.1 - Introducción
    3.2 - Gramáticas libres de contexto y lenguajes
    3.3 - Derivaciones y árboles de parseo
    3.4 - Análisis descendente y analizadores LL
    3.5 - Análisis ascendente y analizadores LR
4 - Java CC y proyectos
    4.1 - Introducción a Java y Eclipse
    4.2 - Gramática de Java CC
    4.3 - Generación de scanner con Java CC
    4.4 - Generación de analizador sintáctico con Java CC
    4.5 - Sintaxis de la línea de comandos

La planificación de la asignatura podrá verse modificada por motivos imprevistos (rendimiento del grupo, disponibilidad de recursos, modificaciones en el calendario académico, etc.) y por tanto no deberá considerarse como definitiva y cerrada.


METODOLOGÍAS Y ACTIVIDADES DE ENSEÑANZA Y APRENDIZAJE:

Metodologías de enseñanza-aprendizaje a desarrollar:

Volumen de trabajo del alumno:

Modalidad organizativa Métodos de enseñanza Horas estimadas
Actividades Presenciales
Clase magistral 10
Otras actividades teóricas 4
Casos prácticos 3
Resolución de prácticas, problemas, ejercicios etc. 6
Talleres 2
Prácticas de laboratorio 2
Actividades de evaluación 4
Trabajo Autónomo
Asistencia a tutorías 2
Estudio individual 20
Preparación de trabajos individuales 18
Tareas de investigación y búsqueda de información 3
Otras actividades de trabajo autónomo 1
Horas totales: 75

SISTEMA DE EVALUACIÓN:

Obtención de la nota final:

Pruebas escritas: 50 %
Trabajos individuales: 45 %
Participación: 5 %
TOTAL 100 %

*Las observaciones específicas sobre el sistema de evaluación serán comunicadas por escrito a los alumnos al inicio de la materia.

BIBLIOGRAFÍA Y DOCUMENTACIÓN:

Bibliografía básica:

CAMPBELL, B., IYER, S., AKBAL-DELIBAS, B. (2012). Introduction to Compiler Construction in a Java World. Chapman & Hall/ CRC (ISBN 9781439860885)
AHO, A.V., LAM M., SETHI, R., ULLMAN, J.D. (2008). Compiladores: Principios, técnicas y herramientas. México: Prentice Hall. (ISBN 9789702611332)
HOLUB, A. I. (1991). Compiler design in C. Prentice-Hall. (ISBN 9780131550452)
SÁNCHEZ, G., VALVERDE J.A. (1989). Compiladores e Intérpretes. Madrid: Ed. Díaz de Santos. (ISBN 9788487189067)

Bibliografía recomendada:

HOPCROFT, J. E., MOTWANI, R., ULLMAN, J. D. (2002). Introducción a la teoría de autómatas, lenguajes y computación, 2ª edición. Madrid: Pearson Educación. (ISBN 9788478290567)
ALFONSECA, M., SANCHO, J., MARTÍNEZ ORGA, M. (1997). Teoría de lenguajes, gramáticas y autómatas. Madrid: Universidad y Cultura, D.L. (ISBN 8460560929)
AHO, A.V., ULLMAN, J.D. (1972). The theory of parsing, translation and compiling (Vol. I y II). Prentice-Hall. (ISBN 9780139145568)
GRUNE, D., VAN REEUWIJK, K., BAL, H.E., JACOBS, C. J. H., LANGEDOEN, K. (2012). Modern Compiler Design. Springer. (ISBN 9781461446989)

Páginas web recomendadas:

Java CC https://java.net/projects/javacc


* Guía Docente sujeta a modificaciones