[go: up one dir, main page]

0% encontró este documento útil (0 votos)
30 vistas9 páginas

Curso de Compiladores UTEC 2020

Este documento presenta un silabo para un curso de Compiladores de 4 créditos. El curso cubrirá los conceptos y principios fundamentales de la teoría de compilación para el diseño e implementación de compiladores. Los objetivos incluyen explicar los pasos involucrados en la traducción de código fuente a código de bajo nivel y discutir temas como representaciones de tiempo de ejecución, optimización de código, y memoria. El curso busca que los estudiantes obtengan una visión global del problema de diseñar compiladores

Cargado por

Edcam Code
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
30 vistas9 páginas

Curso de Compiladores UTEC 2020

Este documento presenta un silabo para un curso de Compiladores de 4 créditos. El curso cubrirá los conceptos y principios fundamentales de la teoría de compilación para el diseño e implementación de compiladores. Los objetivos incluyen explicar los pasos involucrados en la traducción de código fuente a código de bajo nivel y discutir temas como representaciones de tiempo de ejecución, optimización de código, y memoria. El curso busca que los estudiantes obtengan una visión global del problema de diseñar compiladores

Cargado por

Edcam Code
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

CIENCIA DE LA

COMPUTACION

COMPILADORES
04 CRÉDITOS

Fecha de actualización: 27/08/2020


Revisado y aprobado por el Centro de Excelencia en Enseñanza y Aprendizaje y la Dirección de Ciencia de1
la Computación
ÍNDICE

1. Asignatura 3
2. Datos generales 3
3. Profesores 3
3.1 Profesor coordinador del curso 4
4. Introducción al curso 3
5. Objetivos 4
6. Competencias 5
7. Resultados de aprendizaje 5
8. Temas 6
9. Plan de trabajo 7
10. Sistema de evaluación 8
11. Sesiones de apoyo o tutorías 8
12. Referencias Bibliográficas 9

Fecha de actualización: 27/08/2020


Revisado y aprobado por el Centro de Excelencia en Enseñanza y Aprendizaje y la Dirección de Ciencia de2
la Computación
UNIVERSIDAD DE INGENIERÍA Y TECNOLOGÍA
SILABO 2020-2

1. ASIGNATURA

CS3402 - Compiladores

2. DATOS GENERALES

2.1.Créditos: cuatro (4) créditos


2.2. Horas de teoría: dos (2) semanales
2.3. Horas de práctica: cuatro (4) semanales
2.4. Duración del período: dieciséis (16) semanas
2.5. Condición:
Obligatorio para Ciencia de la Computación
2.6. Modalidad: Virtual
2.7. Requisitos:
CS2101. Teoría de la Computación. (4° Sem)

3. PROFESORES

3.1. Profesor coordinador del curso

José Antonio Fiestas Iquira (jfiestas@utec.edu.pe)


Horario de atención: Jueves 15:00-16:00

3.2. Profesor(es) instructor(es) del curso

José Antonio Fiestas Iquira (jfiestas@utec.edu.pe)


Horario de atención: Jueves 15:00-16:00

4. INTRODUCCIÓN AL CURSO

Compiladores e intérpretes son parte esencial de un sistema compu-


tacional. Sin ellos tendríamos aún que programar en lenguaje de máqui-
na (Assembler). Durante el curso se impartirán los conceptos y princi-
pios fundamentales de la teoría de compilación para realizar el diseño y
la implementación de un compilador. Esto se hará tanto en forma teórica
como práctica, lo que se verá reflejado en la comprensión de conceptos
y principios, asi como con los ejercicios aplicativos, y en el desarrollo del
proyecto de curso. El estudiante desarrollará una visión global del pro-
blema del diseño y construcción de un compilador, siendo capaz de apli-

Fecha de actualización: 27/08/2020


Revisado y aprobado por el Centro de Excelencia en Enseñanza y Aprendizaje y la Dirección de Ciencia de3
la Computación
car el conocimiento adquirido en tópicos relacionados a lenguajes de
programación, arquitectura, algoritmos e ingeniería de software.

5. OBJETIVOS

Sesión 1: Explicar cómo programas que procesan otros programas tratan a los
otros programas como su entrada de datos. Describir un árbol de sintaxis abs-
tracto para un lenguaje pequeño

Sesión 2: Describir los beneficios de tener representaciones de programas que


no sean cadenas de código fuente.

Sesión 3: Escribir un programa para procesar alguna representación de código


para algún propósito, tales como un interprete, una expresión optimizada, o un
generador de documentación.

Sesión 4: Explicar el uso de metadatos en las representaciones de tiempo de


ejecución de objetos y registros de activación, tales como los punteros de la
clase, las longitudes de arreglos, direcciones de retorno, y punteros de frame.

Sesión 5: Discutir las ventajas, desventajas y dificultades del término (just-in-


time) y recompilación automática. Identificar los servicios proporcionados por
los sistemas de tiempo de ejecución en lenguajes modernos.

Sesión 6: Distinguir una definición de un lenguaje de una implementación parti-


cular de un lenguaje (compilador vs interprete, tiempo de ejecución de la repre-
sentación de los objetos de datos, etc). Distinguir sintaxis y parseo de la se-
mantica y la evaluación.

Sesión 7: Bosqueje una representación de bajo nivel de tiempo de ejecución de


construcciones del lenguaje base, tales como objetos o cierres (closures)

Sesión 8: Explicar cómo las implementaciones de los lenguajes de programa-


ción tipicamente organizan la memoria en datos globales, texto, heap, y sec-
ciones de pila y como las características tales como recursión y administración
de memoria son mapeados a este modelo de memoria. Identificar y corregir las
pérdidas de memoria y punteros desreferenciados. Discutir los beneficios y li-
mitaciones de la recolección de basura (garbage collection), incluyendo la no-
ción de accesibilidad.

Sesión 9: Usar gramáticas formales para especificar la sintaxis de los lenguajes

Sesión 10: Usar herramientas declarativas para generar parseadores y escáne-


res.

Sesión 11: Identificar las características clave en las definiciones de sintaxis:


ambiguedad, asociatividad, precedencia.

Sesión 12: Implementar analizadores sensibles al contexto y estáticos a nivel


de fuente, tales como, verificadores de tipos o resolvedores de identificadores
para iden- tificar las ocurrencias de vinculo.

Fecha de actualización: 27/08/2020


Revisado y aprobado por el Centro de Excelencia en Enseñanza y Aprendizaje y la Dirección de Ciencia de4
la Computación
Sesión 13: Describir analizadores semánticos usando una gramática con
atributos.

Sesión 14: Identificar todos los pasos esenciales para convertir


automáticamente código fuente en código emsamblador o otros lenguajes de
bajo nivel. Generar código de bajo nivel para llamadas a funciones en lengua-
jes modernos.

Sesión 15: Discutir por qué la compilación separada requiere convenciones de


llamadas uniformes. Discutir por qué la compilación separada limita la optimi-
zación debido a efectos de llamadas desconocidas. Discutir oportunidades
para optimización introducida por la traducción y enfoques para alcanzar la op-
timización, tales como la selección de la instrucción, planificación de instruc-
ción, asignación de registros y optimización de tipo mirilla (peephole
optimization)

6. COMPETENCIAS

a2. Aplicar conocimientos de computación y de matemáticas apropiadas para


la disciplina.
El estudiante obtendrá un concepto global adecuado del diseño de un compila-
dor a través de ejercicios de interpretación de gramáticas y expresiones regula-
res.

a3. Aplicar la base matemática, principios de algoritmos y la teoría de la


Computación en el modelamiento y diseño de sistemas.
El estudiante logrará formular el diseño de un compilador basado en los cono-
cimientos adquiridos en Teoría de la Computación, a través de ejercicios apli-
cativos

b2. Analizar problemas e identificar y definir los requerimientos computaciona-


les apropiados para su solución.
El estudiante logrará aplicar los conocimientos teóricos adquiridos a través de
casos prácticos en clase, y en el desarrollo del proyecto del curso.

7. RESULTADOS DE APRENDIZAJE

Al final del curso de Compiladores se espera:

RA1. Que el estudiante sea capaz de conocer las técnicas básicas empleadas
durante el proceso de generación intermedio, optimización y generación de có-
digo. Esto se logrará paulatinamente durante el curso, en las etapas menciona-
das de construcción de un compilador a través de los ejercicios de clase pro-
puestos.

Fecha de actualización: 27/08/2020


Revisado y aprobado por el Centro de Excelencia en Enseñanza y Aprendizaje y la Dirección de Ciencia de5
la Computación
RA2. Que el estudiante sea capaz de implementar pequeños compiladores.,
que sean cad vez mas complejos. Esto se logrará a través de la
implementación por etapas de un compilador. El objetivo es que lo aprendido se
consolide con la culminación satisfactoria del proyecto de curso.

8. TEMAS

1. Representación de programas
1.1 Programas que tienen otros programas como entrada tales como inter-
pretes, compiladores, revisores de tipos y generadores de documentación.
1.2 Estructuras de datos que representan código para ejecución, traducción
o transmisión.
1.3 Arboles de sintaxis abstracta, para contrastar la sintaxis correcta.

2: Traducción y ejecución de lenguajes


2.1 Interpretación vs. compilación a código nativo vs. compilación de repre-
sentación portable intermedia.
2.2 Pipeline de traducción de lenguajes: análisis, revisión opcional de tipos,
traducción, enlazamiento, ejecución:
2.2.1 Ejecución como código nativo o con una máquina virtual
2.2.2 Alternativas como carga dinámica y codificación dinámica de
código (o “just-in-time””)
2.3 Representación en tiempo de ejecución de construcción del lenguaje
núcleo tales como objetos (tablas de métodos) y funciones de primera clase
(cerradas)
2.4 Ejecución en tiempo real de asignación de memoria: pila de llamadas,
montículo, datos estáticos:
– Implementación de bucles, recursividad y llamadas de cola
2.5 Gestión de memoria:
2.5.1. Gestión manual de memoria: asignación, limpieza y reuso de la
pila de memoria
2.5.2. Gestión automática de memoria: recolección de datos no
utilizados (garbage collection)

3: Análisis de sintaxis
3.1 Exploración (análisis léxico) usando expresiones regulares.
3.2. Estratégias de análisis incluyendo técnicas de arriba a abajo (top-down)
(p.e. descenso recursivo, análisis temprano o LL) y de abajo a arriba (bottom-
up) (ej, ‘llamadas hacia atrás - bracktracking, o LR); rol de las gramáticas libres
de contexto.
3.3. Generación de exploradores (scanners) y analizadores a partir de especifi-
caciones declarativas.

4: Análisis semántico de compiladores


4.1 Representaciones de programas de alto nivel tales como árboles de
sintaxis abstractas.
4.2. Alcance y resolución de vínculos.

Fecha de actualización: 27/08/2020


Revisado y aprobado por el Centro de Excelencia en Enseñanza y Aprendizaje y la Dirección de Ciencia de6
la Computación
4.3. Revisión de tipos.
4.4. Especificaciones declarativas tales como gramáticas atribuídas.

5: Generación de código
5.1. Llamadas a procedimientos y métodos en envío.
5.2. Compilación separada; vinculación. Selección de instrucciones. Calenda-
rización de instrucciones.
5.3. Asignación de registros. Optimización por rendija (peephole)

9. PLAN DE TRABAJO

9.1 Metodología

La metodología del curso se enfoca en clases magistrales y proyectos de in-


vestigación, en las clases teóricas (1 a la semana) y prácticas (2 a la semana)
respectivamente. En las clases teóricas se imparten conocimientos necesarios
para el desarrollo de ejercicios prácticos semanales. De esta manera se logrará
una evaluación continua del avance del alumno. El conocimiento teórico adqui-
rido se evaluará en los exámenes parcial y final, mientras que el práctico en el
proyecto del curso.

9.2. Sesiones Teóricas:

Las sesiones de teoría se llevan a cabo en clases magistrales donde se reali-


zarán actividades que propicien un aprendizaje activo, con descripción de ca-
sos prácticos, que permitan a los estudiantes interiorizar los conceptos.

9.3 Sesiones de Laboratorio:

Para verificar que los alumnos hayan alcanzado el logro planteado para cada
una de las unidades de aprendizaje, realizarán actividades que les permita
aplicar los conocimientos adquiridos durante las sesiones de teoría y se les
propondrá retos que permitan evaluar el desempeño de los alumnos.

Del mismo modo, se fomenta la participación en equipo a través de proyectos


de investigación que se realizan de manera grupal. Estos se presentarán en
forma escrita y oral, para dar la oportunidad al alumno, de exponer sus ideas.

Como parte de la evaluación continua se asignarán tareas semanales en forma


grupal o individual, motivándolos con puntos adicionales en las diferentes eta-
pas de la evaluación del curso.

Fecha de actualización: 27/08/2020


Revisado y aprobado por el Centro de Excelencia en Enseñanza y Aprendizaje y la Dirección de Ciencia de7
la Computación
10. SISTEMA DE EVALUACIÓN

PRÁCTICA Y/O LABORATO-


TEORÍA
RIO
EVALUACIÓN
1 Nota de Evaluación Contínua
1 Nota de Evaluación Contínua
(C1)(5%, primeras 8 semanas)
*La pondera- (C) (10%)
1 Nota de Evaluación Contínua
ción de la eva- 1 Exámen Parcial (E1) (25 %)
(C2)(5%, semanas 8-16)
luación se hará 1 Exámen Final (E2)(25 %)
1. Proyecto (P) (30 %)
si ambas par-
tes están apro-
badas 40% 60%

100%

Se utilizarán las siguientes rúbricas para medir las competencias del curso, y
evaluar las actividades más significativas del curso: enlace

11. SESIONES DE APOYO O TUTORÍAS

Este apartado permite formalizar los espacios de apoyo a los estudiantes y que
éstos tengan la atención NECESARIA y el tiempo disponible para presentar
sus dudas y consultas acerca del curso:

Semana Tema a
Fecha/ Hora Objetivos de la sesión
tratar
08/09/2020 Evalu- Resolver dudas sobre exámenes
2 2:00 PM – 2:30 aciones y y rubricas , asi como participación
PM rubricas en clase
22/09/2020
Topicos del Resolver dudas sobre primeras 3
4 2:00 PM – 2:30
curso semanas
PM
06/10/2020
Consultas sobre proyecto y rubri-
6 2:00 PM – 2:30 Proyecto
cas
PM
20/10/2020
8 2:00 PM – 2:30 Parcial Solucionario examen parcial
PM

Fecha de actualización: 27/08/2020


Revisado y aprobado por el Centro de Excelencia en Enseñanza y Aprendizaje y la Dirección de Ciencia de8
la Computación
03/11/2020
Topicos del Resolver dudas sobre temas tra-
10 2:00 PM – 2:30
curso tados en clase
PM
17/11/2020
Consultas sobre presentación de
12 2:00 PM – 2:30 Proyecto
proyecto
PM
01/12/2020
Consultas sobre ultimas notas y
14 2:00 PM – 2:30 Final
examen final
PM

12. REFERENCIAS BIBLIOGRÁFICAS

• Alfred Aho et al. (2011) Compilers Principles Techniques And Tools. 2nd.
ISBN:10-970-26-1133-4. Pearson

• W. Appel. (2002) Modern compiler implementation in Java. 2.a edición.


Cambridge University Press.

• Kenneth C. Louden. (2004) Compiler Construction: Principles and Practice.


Thomson.

• Kenneth C. Louden. (2004) Lenguajes de Programacion. Thomson.

• Bernard Teufel and Stephanie Schmidt. (1998) Fundamentos de


Compiladores. Addison Wesley Iberoamericana.

Fecha de actualización: 27/08/2020


Revisado y aprobado por el Centro de Excelencia en Enseñanza y Aprendizaje y la Dirección de Ciencia de9
la Computación

También podría gustarte