Download Compiladores_SilaboUPN_2011

Document related concepts
Transcript
SÍLABO DEL CURSO
COMPILADORES
FACULTAD DE INGENIERÍA
CARRERA DE INGENIERÍA DE SISTEMAS
1
DATOS GENERALES
Facultad
Carrera Profesional
Departamento
Tipo de curso
Requisitos
Ciclo de Estudios
Duración del curso
Inicio
Término
Extensión horaria
Créditos
Período lectivo
Docente
: Ingeniería y Arquitectura
: Ingeniería de Sistemas
: Ingeniería de Sistemas
: Obligatorio
: Lenguajes de Programación
:8
: 17 semanas
: 22 de agosto del 2011
: 17 de diciembre del 2011
: 4 horas semanales
:4
: 2011 – 2
: Ms. Ingº Carlos Castillo Diestra.
[email protected]
2
FUNDAMENTACIÓN
Esta asignatura es de naturaleza teórica y práctica y tiene por objetivo que los alumnos del VIII ciclo
de la carrera de Ingeniería de Sistemas conozcan y apliquen los principios y técnicas de escritura de
compiladores. En el curso se tratará el proceso de compilación, describiendo los componentes de un
compilador, el entorno en que trabajan los compiladores y algunas herramientas de software que
facilitan la construcción de compiladores. Los alumnos realizarán un proyecto de aplicación, utilizando
como lenguaje de programación C/C++ y los generadores de código FLEX y BISON.
3
COMPETENCIA
Al final del curso el alumno será capaz de aplicar los principios y técnicas de escritura de
compiladores en la construcción de los componentes de un compilador, utilizando el lenguaje de
programación C/C++ y los generadores de código FLEX y BISON.
4
OBJETIVOS ESPECÍFICOS DEL CURSO
4.1 Conocer en detalle las fases del proceso de traducción de programas.
4.2 Entender el uso de las expresiones regulares y autómata finitos para implementar analizadores
léxicos.
4.3 Implementar analizadores léxicos usando C/C++ y FLEX
4.4 Entender las principales técnicas de análisis sintáctico ascendente y descendente.
4.5 Implementar un analizador sintáctico usando C/C++ y BISON
4.6 Conocer la función del análisis semántico
4.7 Conocer las técnicas involucradas en la generación de código intermedio y código objeto
eficiente.
5
CONTENIDOS CONCEPTUALES
 Lenguajes y gramáticas
 Expresiones regulares
 Programación de sistemas
 Procesadores de lenguajes
 El compilador
 Autómatas finitos
 Análisis léxico
 Análisis sintáctico
 Análisis semántico
 Generación de código intermedio.
 Formas internas. Tipos de formas interna
 Tabla de símbolos
 Generación de código objeto: introducción
6
CONTENIDOS PROCEDIMENTALES
 Ejercitación reflexiva en diversas técnicas, destrezas y/o estrategias para hacer cosas concretas.
Sílabo del Curso






COMPILADORES
Para el aprendizaje de técnicas, se establecerá la secuencia de acciones y con entrenamiento
debe concluir en una automatización de la cadena, con el fin de alcanzar una rápida y certera
ejecución, al tiempo que menos costosa en recursos cognitivos.
Propiciar el desarrollo de capacidad reflexiva para la aplicación de técnicas en situaciones
diversas, modificándolas para adecuarlas a nuevas condiciones y condiciones ideales de uso.
A través de casos reales, mostrar la aplicación de estrategias para aspectos de planificación,
toma de decisiones y controlar la aplicación de las técnicas para adaptarlas a las necesidades
específicas de cada tarea.
Capacitar para una aplicación organizada y controlada de técnicas y recursos disponibles.
Proveer el entrenamiento para la aplicación de los conocimientos en contextos diferenciados,
debido a que todo aquello que haya aprendido será más útil en la medida en que pueda utilizarlo
en situaciones imprevisibles.
Para organizar una adecuada secuencia de contenidos procedimentales se considera
primeramente el dominio de aquellos procedimientos considerados como básicos, es decir, que
respondan a necesidades urgentes a satisfacer; en segundo lugar, se procura asegurar el
aprendizaje de aquellos procedimientos que resulten más potentes que otros en la solución de
tareas, o como requisito para otros aprendizajes.
7
CONTENIDOS ACTITUDINALES
 Responsabilidad individual y colectiva
 Disposición a la investigación y a la búsqueda de información adicional
 Actitud crítica para el análisis de problemas
 Valoración de los conocimientos adquiridos
 Disposición al trabajo en equipo
 Disposición a recibir criticas del docente y sus compañeros
 Disposición a ser reflexivos y creativos
 Capacidad de escucha
 Mentalidad abierta
8
METODOLOGÍA GENERAL DEL CURSO
El desarrollo del curso es Teórico - Práctico, los conocimientos adquiridos en las clases teóricas, son
aplicados y puestos a discusión en el laboratorio para la verificación del mismo, de esa forma, el
alumno pone a prueba lo aprendido y puede profundizar más sus conocimientos gracias a la
realización de prácticas de laboratorio. Además, los alumnos en grupo de hasta tres alumnos
realizarán un proyecto de aplicación.
9
PROGRAMACIÓN
UNIDAD
SEM
1
UNIDAD 1
Introducción a la Teoría
de Lenguajes y
Compiladores
(4 Semanas)
2
3
4
2
ACTIVIDAD
LENGUAJES Y GRAMÁTICAS
Alfabeto, cadena, gramática, derivación, derivación más a la
izquierda, derivación más a la derecha, sentencia, lenguaje,
clausura, clausura positiva.
Laboratorio: Reconocimiento de cadenas
Jerarquía de gramáticas según Chomsky. Lenguajes,
Gramáticas y Autómatas.
EXPRESIONES REGULARES
Expresión regular
Definición regular
PROGRAMACIÓN DE SISTEMAS
PROCESADORES DE LENGUAJES
Intérpretes, Traductores: compiladores y ensambladores.
Laboratorio: Reconocimiento de cadenas
EL COMPILADOR
El Compilador
Estructura de un compilador
Proceso de Compilación
Laboratorio: Implementación de una ER en C/C++
T1: PRACTICA CALIFICADA ESCRITA
Laboratorio: Flex
FUENTES BIBLIOGRÁFICAS:
[01] Capítulos 1, 3
COMPILADORES
5
UNIDAD 2
Análisis léxico (3
Semanas)
6
7
8
9
UNIDAD 3
Análisis Sintáctico
(4 Semanas)
10
11 y
12
13
UNIDAD 4
Análisis
Semántico,
Tabla de Símbolos y
Síntesis (3 Semanas)
14
15
16
17
AUTÓMATAS FINITOS
Autómatas Finitos: tipos (AFND, AFD)
Conversión de una ER a un AFND
Conversión de un AFND a un AFD
Laboratorio: Implementación de AFDs
ANÁLISIS LÉXICO
Análisis léxico
Tokens, lexemas, patrones
Implementación del analizador léxico de un lenguaje de
programación.
Laboratorio: Implementación analizadores léxicos mediante
AFDs de un lenguaje de programación.
Construcción automática de analizadores léxicos: FLEX
PROYECTO: Construcción de un analizador léxico-sintáctico
para un lenguaje de programación de alto nivel en grupos de
hasta tres alumnos. (Entrega del proyecto en la semana 15)
FUENTES BIBLIOGRÁFICAS:
[01] Capítulo 3
EXAMEN PARCIAL
ANÁLISIS SINTÁCTICO
Gramática Libres de Contexto.(GLC)
Arboles de derivación.
Notación BNF.
Ambiguedad. Recursividad.
Eliminación de la recursividad por la izquierda
Factorización por la izquierda.
Laboratorio: BISON
Analizador predictivo no recursivo
Esquema General. Algoritmo. Construcción de Tabla de
Análisis.
Laboratorio: BISON
Analizadores Ascendentes.
Analizadores LR.
Construcción de un analizador SLR(0): Items. Gramática
aumentada. Conjuntos
CLAUSURA y GOTO. Colección Canónica. Construcción de
tablas de análisis.
Laboratorio: BISON
T2: PRACTICA CALIFICADA ESCRITA
FUENTES BIBLIOGRÁFICAS:
[01] Capítulos 4
ANALISIS SEMANTICO.
Comprobación estática.
Sistemas de tipos.
Especificación de un Comprobador de Tipos sencillo.
Conversión de tipos.
Laboratorio: Asesoría de proyecto
Traducción Dirigida por la Sintaxis.
Atributos. Reglas Semánticas.
Generación de Código Intermedio.
Formas Internas. Tipos de Formas Interna
Laboratorio: Asesoría de proyecto
Semántica de Operadores de Formas Internas.
Estructuras de datos.
Semántica de operadores aritméticos y saltos.
Operadores CARGA y CARGADIR y CARGAVAL
Tabla de Símbolos
GENERACIÓN DE CÓDIGO OBJETO: Introducción
Laboratorio: T3 REVISIÓN DE PROYECTOS
FUENTES BIBLIOGRÁFICAS:
[01] Capítulos 5, 6, 8, y 9
EXAMEN FINAL
EXAMEN SUSTITUTORIO
3
Sílabo del Curso
10
COMPILADORES
SISTEMA DE EVALUACIÓN DEL CURSO
El cronograma de la evaluación continua del curso es el siguiente:
ESPECIFICACIÓN DE TRABAJOS DEL CURSO
T
Descripción
Semana
T1
Práctica calificada escrita
4
T2
Practica calificada escrita
12
T3
Presentación y Exposición Final de Proyectos del Curso
15
El peso de cada T es:
EVALUACIÓN
T01
T02
T03
TOTAL
PESO
(%)
20
35
45
100%
ESCALA
VIGESIMAL
2,4
4,2
5,4
12
Los pesos ponderados de las clases de evaluación son los siguientes:
EVALUACIÓN
PARCIAL
CONTINUA
FINAL
TOTAL
PESO
(%)
20
60
20
100%
ESCALA
VIGESIMAL
4
12
4
20
El examen Parcial se llevará a cabo en la semana 8 y el Examen Final se llevará a cabo en la semana
16. La Evaluación Sustitutoria evalúa toda la temática desarrollada en el semestre y se rinde la
semana consecutiva al término de los exámenes finales y su nota reemplazará, necesariamente, a la
nota de un Examen (Parcial o Final) o a la nota de un T (Evaluación Continua), de tal manera que el
resultado final sea favorable al alumno.
11
12
BIBLIOGRAFÍA OBLIGATORIA
#
01
CODIGO
005.453 AHO
02
03
04
005.133C PAPP/M
005.133C HEKM
005.133C++ DEIT/J
TITULO
Compiladores
principios,
técnicas
herramientas
Manual de Borland C
C++, guia para programadores en C /
Cómo programar en C / C++ y Java /
y
BIBLIOGRAFÍA COMPLEMENTARIA
#
05
06
07
4
AUTOR
Aho, A.; Sethi, R.;
Ullman, J
Pappas, Chris
Hekmatpour, Sharam
Deitel, Harvey M
AUTOR
Beck, L.
Trembaly, J., Sorenson, P.G.
Holub, A.I
TITULO
Software de sistemas: Introducción a la programación de
sistemas. Ed. Addison-Wesley Iberoamericana, USA, 1988
The theory and practice of compiler writing
Compiler Design in C. Prentice Hall, 1990