programa de asignatura - Cursos atendidos por Rodrigo Orizondo

Anuncio
PONTIFICIA UNIVERSIDAD CATÓLICA MADRE Y MAESTRA
FACULTAD DE CIENCIAS DE LA INGENIERIA
DEPARTAMENTO DE INGENIERÍA EN SISTEMAS Y COMPUTACIÓN
PROGRAMA DE ASIGNATURA
Asignatura:
Código:
Programación III
Régimen:
ISC-314
Año/Período: 3er Año/ 2do Período
Horas de Clases
Área a la que pertenece: Programación
DISTRIBUCION DE HORAS DE CLASES
Teóricas
Prácticas
Total General
Horas
% Materia
Horas
% Materia
Horas
% Materia
42
60%
28
40%
70
100%
T
P
C
3
2
4
I-DESCRIPCIÓN GENERAL
Los formalismos de la teoría de la compilación pueden ser aplicados a otros campos y áreas de la
informática. El estudio del proceso de la compilación requiere un conocimiento profundo de los
elementos que constituyen un lenguaje de programación. Por lo tanto, esta asignatura ayuda al
estudiante a reforzar sus conocimientos y a adquirir nuevos criterios para la programación, diseño,
implementación y evaluación de lenguajes de programación. Se estudian las diferentes fases de un
compilador y sus correspondientes técnicas de implementación.
II-OBJETIVOS
Objetivos Generales:
Objetivos Específicos:
Que los estudiantes conozcan el diseño de compiladores así como las
técnicas y procesos que intervienen en el proceso de compilación.
Que los estudiantes sean capaces de:
• Adquirir los conocimientos necesarios para la optimización de
código.
• Comprender la gestión interna de la memoria.
• Comprender las estrategias avanzadas utilizadas por compiladores
e intérpretes.
• Profundizar en las técnicas de optimización de código intermedio.
• Aprovechar mejor las capacidades de los compiladores y ampliar el
conocimiento del funcionamiento de los compiladores.
• Desarrollar analizadores léxicos, sintácticos y semánticos.
III-INTERRELACIÓN CON OTRAS ASIGNATURAS
Prerrequisitos: ISC-307
ISC-347
Asignaturas que se aconseja debe haber cursado:
IV-PROFESORADO
Profesor responsable:
Claustro de profesores:
V-METODOLOGÍA
El curso será impartido a través de cátedras, desarrollo de prácticas y exposiciones que indicará el
profesor. El proceso de aprendizaje será controlado a través de las prácticas, tareas y exámenes
desarrollados durante el curso. Se aplica como metodología de Aprendizaje basado en Problemas.
La distribución porcentual de los puntos asociados a las evaluaciones debe estar distribuido en:
70%(Eval. Parciales) + 30%(Eval. Final). Las evaluaciones que cubran el 50% de los puntos de la
asignatura deben realizarse previo a las fechas de retiro parcial y total.
Los exámenes parciales tendrán una duración de 3-2 horas, deben ser confeccionados abordando
contenidos teóricos y/o prácticos.
Las tareas serán orientadas con 15 días de anticipación a la fecha de entrega programada y su
evaluación estará dividida en dos partes: la entrega formal del trabajo y la exposición oral en el curso de
las soluciones encontradas, valorando su eficiencia y claridad.
La evaluación final (30%) deberá ser evaluada a través del desarrollo de un mini-compilador de un
lenguaje específico, que le permita aplicar los conocimientos adquiridos. El trabajo debe ser individual o
como máximo grupos de 2 estudiantes; debe incluir la entrega de un documento (en el formato definido
para la carrera) que describa el trabajo realizado y los ficheros de código fuente; la exposición de los
trabajos debe realizarse a puertas abiertas con estudiantes y profesores del departamento como
invitados.
VI-PERFIL DEL EGRESADO
Esta asignatura aporta al egresado los conocimientos teóricos y prácticos para desarrollar software de
base como: traductores, cargadores, herramientas, utilerías, generadores de código, etc.
Competencias logradas:
- Capacidad de análisis y síntesis.
- Capacidad de organización y planificación del trabajo.
- Capacidad de aplicar los conocimientos en la práctica.
- Capacidad para trabajar en equipo.
- Habilidad para trabajar de forma autónoma.
- Escribir programas más óptimos y legibles.
- Programación más abstracta.
- Depuración más rápida de programas.
VII-CONTENIDO DE LA TEORÍA
Tema 1. Introducción a la programación de sistemas.
1. Conceptos y Definiciones.
2. Herramientas desarrolladas con la teoría de programación de sistemas.
3. Lenguajes.
a. Lenguajes naturales.
b. Lenguajes artificiales.
c. Proceso de la comunicación.
4. Traductor y su estructura.
a. Ensambladores.
b. Compiladores.
c. Interpretes.
5. Generadores de código para compiladores (compilador de compilador).
Tema 2. Introducción al diseño de los lenguajes de programación.
1. Visión del problema.
2. Consideraciones Preliminares.
3. Objetivos y filosofías del diseño de los lenguajes de programación.
4. Diseño detallado.
5. Caso de estudio.
Tema 3. Análisis Léxico.
1. Introducción a los Autómatas finitos y expresiones regulares.
2. Analizador de léxico.
3. Manejo de localidades temporales de memoria (buffers).
4. Creación de tablas de símbolos.
5. Manejo de errores léxicos.
6. Generadores de código léxico: Lex y Flex.
Tema 4. Análisis sintáctico.
1. Introducción a las Gramáticas libres de contexto y árboles de derivación.
2. Diagramas de sintaxis.
3. Precedencia de operadores.
4. Analizador sintáctico.
a. Analizador descendente (LL).
b. Analizador ascendente(LR, LALR).
5. Administración de tablas de símbolos.
6. Manejo de errores sintácticos y su recuperación.
7. Generadores de código para analizadores sintácticos: Yacc, Bison.
Tema 5. Análisis semántico.
1. Analizador semántico
2. Verificación de tipos en expresiones.
3. Conversión de tipos.
4. Acciones agregadas en un analizador sintáctico descendente (top-down).
5. Pila semántica en un analizador sintáctico ascendente (bottom-up).
6. Administración de la tabla de símbolos.
7. Manejo de errores semánticos.
Tema 6. Generación de código intermedio.
1. Lenguajes intermedios.
2. Notaciones.
a. Infija.
b. Postfija.
c. Prefija.
3. Representación de código intermedio.
a. Notación Polaca.
b. Código P.
c. Triplos.
d. Cuádruplos.
4. Esquemas de generación.
a. Expresiones.
b. Declaración de variables, constantes
c. Estatuto de asignación.
d. Estatuto condicional.
e. Estatuto de ciclos
f. Arreglos.
g. Funciones.
Tema 7. Optimización.
1. Tipos de optimización.
a. Locales.
b. Bucles.
c. Globales.
d. De mirilla.
2. Costos.
a. Costo de ejecución.
b. Criterios para mejorar el código.
c. Herramientas para el análisis del flujo de datos.
Tema 8. Generación de código objeto.
1. Lenguaje máquina.
a. Características.
b. Direccionamiento.
2. Lenguaje ensamblador.
a. Características.
b. Almacenamiento.
3. Registros.
a. Distribución.
b. Asignación.
4. Administración de memoria.
VIII-GUIA DE LAS PRÁCTICAS
Las clases de laboratorio tienen como objetivo central la adquisición de habilidades prácticas. Es
importante tener en cuenta los objetivos y distribución de contenidos de la teoría, para planificar los
laboratorios.
Guía para los laboratorios:
Tema 1. Introducción a la programación de sistemas.
- Analizar diferentes generadores de código que sirvan para desarrollar compiladores.
Tema 2. Introducción al diseño de los lenguajes de programación.
- Discutir en grupo las condiciones que determinan la funcionalidad del lenguaje tales como:
Microestructuras, estructura de las expresiones, estructuras de datos, estructuras de control,
estructuras de compilador, estructuras para entradas y salidas.
- Analizar un lenguaje computacional como caso estudio para analizar las características que lo
define, basándose en los aspectos del diseño de un lenguaje de programación.
Tema 3. Análisis Léxico.
- Construir un Analizador de Léxico, considerando el reconocimiento de tokens, la administración
de un espacio temporal de memoria (buffers), la construcción de la tabla de símbolos, así como
el manejo de errores.
- Utilizar un generador de código para esta etapa del proceso como puede ser Lex o Flex, etc.
Tema 4. Análisis sintáctico.
- Construir diagramas de sintaxis a partir de gramáticas.
- Agregar dentro de la gramática del lenguaje la precedencia de operadores.
- Construir un analizador sintáctico bajo la metodología TOP-DOWN y BOTTOMUP.
- Aplicar técnicas para la detección y recuperación de errores en la etapa de sintaxis.
- Integrar la etapa del léxico dentro del desarrollo del compilador.
- Utilizar un generador de código para esta etapa del proceso como puede ser Yacc o Bison, entre
otros.
Tema 5. Análisis semántico.
- Aplicar reglas para la conversión de tipos (casting) en expresiones.
- Agregar acciones semánticas a la estructura de la gramática, tanto en metodología TOP-DOWN
como BOTTOM-UP.
- Manejar la tabla de símbolos a fin de administrar el almacenamiento de información con su tipo.
- Detectar los errores semánticos y la recuperación de los mismos.
Tema 6. Generación de código intermedio.
- Realizar ejercicios con los diferentes tipos de notaciones para la conversión de expresiones:
Infija, prefija y posfija.
- Realizar ejercicios de técnicas básicas para la representación de un código intermedio: Código
P, Triplos y Cuádruplos.
- Desarrollar las acciones que representen la estructura de un lenguaje de programación de alto
nivel en un código intermedio.
Tema 7. Optimización.
- Aplicar las técnicas para la optimización de código sobre el código intermedio generado,
evaluando los criterios de tiempo de ejecución o extensión de código generado.
- Buscar nuevas técnicas para la optimización de código, sobre todo para aquellos lenguajes que
requieren de una máquina virtual para su ejecución sobre multiplataformas.
Tema 8. Generación de código objeto.
- Tratar las características de un lenguaje ensamblador.
- Llevar a cabo dinámicas grupales para recordar las características principales del lenguaje
ensamblador, a fin de llevar un código intermedio, independiente de la máquina a un código
reconocido por el hardware.
- Conocer las técnicas de administración de memoria para el almacenamiento de un programa en
momento de ejecución.
IX-EVALUACIÓN
Normas de evaluación:
Guía de Evaluaciones:
La calificación final de cada estudiante será calculada sumando
las calificaciones obtenidas en las prácticas, tareas, evaluaciones
diarias, parciales y examen final.
Los aspectos a evaluar en cada caso estarán regidos por:
1. La eficiencia de la solución presentada.
2. El cumplimiento del procedimiento establecido.
3. La entrega en el marco de tiempo fijado.
4. La presentación, claridad y organización a la entrega.
1ra Tarea
(10ptos)
Desarrollar una investigación sobre los
traductores que se utilizan con mayor
frecuencia en nuestro tiempo.
Proponer y diseñar un lenguaje prototipo.
2da Tarea
(15ptos)
Desarrollar un analizador de léxico, aplicado a
un lenguaje prototipo o comercial, utilizando
un generador de código para esta etapa del
proceso como puede ser Lex o Flex.
3ra Tarea
(15ptos)
Desarrollar un analizador de sintáctico,
aplicado a un lenguaje prototipo o comercial,
utilizando un generador de código para esta
etapa del proceso como puede ser Yacc o
Bison, entre otros.
Examen 1
(15ptos)
Examen que evalúe:
- Agregar acciones semánticas a la
estructura de la gramática, tanto en
metodología
TOP-DOWN
como
BOTTOM-UP.
- Manejar la tabla de símbolos a fin de
administrar el almacenamiento de
información con su tipo.
- Detectar los errores semánticos y la
recuperación de los mismos.
Examen 2
(15ptos)
Examen que permita evaluar el conocimiento
de
las
características
del
lenguaje
ensamblador; y las técnicas de administración
de memoria para el almacenamiento de
un programa en momento de ejecución.
Proyecto Final
(30ptos)
Desarrollar un mini-compilador para un
lenguaje prototipo, que le permita aplicar los
conocimientos adquiridos.
X-BIBLIOGRAFÍA
Bibliografía Básica:
• Kenneth C. Louden. Construcción de compiladores Principios y
práctica. Thomson.
• Compiladores: principios, técnicas y herramientas / Alfred V. Aho
... [et. al]. (Mexico, D. F.: Pearson Educacion , 2008.)
• Compiladores e intérpretes: teoría y práctica / Manuel Alfonseca
Moreno ... [et al.]. (Madrid: Pearson Education, 2006.)
Bibliografía Complementaria:
• Aho, Sethi, Ullman. Compiladores Principios, técnicas y
herramientas. Addison Wesley.
• Karen A. Lemone. Fundamentos de compiladores Cómo traducir
al lenguaje de computadora. Compañía Editorial Continental.
• Jesús Salas Parrilla. Sistemas Operativos y Compiladores.
McGraw Hill.
• Beck. Software de Sistemas, Introducción a la programación de
Sistemas. Addison-Wesley Iberoamericana.
• Teufel,
Schmidt,
Teufel.
Compiladores
Conceptos
Fundamentales. Addison-Wesley Iberoamericana.
• Kenneth C. Louden. Lenguajes de programación Principios y
práctica. Thomson.
• Guillermo Levine Gutiérrez. Computación y programación
moderna Perspectiva integral de la informática. Pearson
Educación.
• Ronald Mak. Writing compilers and interpreters. Wiley Computer
Publishing.
• Fischer, LeBlanc. Crafting a compiler with C. Cummings
Publishing Company, Inc.
• Thomas Pittman, James Peters. The art of compiler design
Theory and practice. Prentice Hall.
• Peter Abel. Lenguaje ensamblador y programación para PC IBM
y compatibles. Pearson Educación.
• Temblay & Sorenson. Compilers Writing. Mc Graw Hill.
• John R. Levine, Tony Mason, Doug Brown. Lex y Yacc. O'Reilly &
Associates.
Biblioteca
Internet
[005.453 C737pE]
[005.453 C737i]
Última actualización en fecha 12/01/2014
Biblioteca
Internet
Descargar