15. material de consulta recomendado

Anuncio
UNIDAD ACADEMICA
PROGRAMA
AREA DE FORMACIÓN
NÚCLEO DE FORMACIÓN
NOMBRE DEL CURSO
CODIGO DEL CURSO
SEMESTRE
CREDITOS
TRABAJO PRESENCIAL
TRABAJO INDEPENDIENTE
TOTAL EN HORAS
PROYECTO DE INVESTIGACION
AUTOR
:
:
:
:
:
:
:
:
:
:
:
:
:
Instituto de Educación a Distancia
Ingeniería de Sistemas por Ciclos
Ingeniería Aplicada
Problemas de los sistemas de información
Compiladores
VI
40
152
192
Sistemas de Información
César Augusto Díaz García
1. JUSTIFICACIÓN DEL CURSO
El mundo moderno de la programación de computadores a pasado de ser un campo
del conociminto en el cual se aplican los conceptos propios de un lenguaje en particular
a la solución de un problema real, a un escenario mucho más amplio como los es la
Computación Teórica, es decir, hoy en día lo importante no es conocer un buen
porcentaje de la sintaxis de un lenguaje, hoy en día el problema es otro: cómo se
pueden construir herramientas que permitan la automatización de los procesos de
codificación de la solución de un problema en cualquier problema de desarrollo.
Lo anterior subyace a la intencionalidad de los investigadores modernos en el campo
de la computación, quienes desarrollan estudios que permintan el desarrollo de nuevas
herramientas que se encarguen de la codificación de una solución, permitiendo al
ingeniero de sistemas dedicar mayor tiempo a las tares de análisis y diseño de las
soluciones, aspecto fundamental en la implementación de de la solución de un
problema y no a la codificación en si misma.
El desarrollo de este curso es de vital importancia en la formación del futuro ingeniero
de sistemas ya que lo orienta y favorece el desarrollo de compotencias en conceptos
que aunque se bienen trabajando desde hace algún tiempo hoy cobran relevancia,
como son: Automátas finitos, analizadores sintáticos y lexicográficos, generación de
código, optimización de código, cálculo lambda y cálculo Phi, Máquinas de estado fínito
y máquinas de Turing, como los más importantes, con miras a su incorporación en
futuros proyectos de investigación en el campo de la computación teórica.
2. OBJETO DE TRABAJO CURRICULAR
Profundizar los conocimientos de teoría de autómatas y árboles para su aplicación
en la construcción de compiladores y analizadores sintácticos.
Este objetivo general se concreta en guiar a los estudiantes para que logren adquirir
los conceptos y competencias en la construcción de compliadores.
3. PROPÓSITOS DE FORMACIÓN

GENERAL
Aplicar las técnicas y prácticas utilizadas en la construcción de compiladores al
desarrollo de software de propósito general, con el fin de lograr estándares de
desarrollo de alta calidad.

ESPECIFICOS
1. Entender los conceptos fundamentales de la construcción de un compilador
sencillo, de una sola pasada.
2. Identificar las funciones y características de una analizador léxico, a través
de la utilización de autómatas finitos.
3. Aplicar el concepto de gramáticas libres del contexto en la construcción de
analizadores sintácticos.
4. Identificar las diferentes técnicas para la generación automática de código, y
los procesos que este sufre para lograr su optimización.
5. Identificar las características de algunos compiladores que se utilizan en la
actualidad.
4. PRESENTACION Y SUSTENTACION DEL CURSO
Este curso realiza un recorrido profundo por los diferentes conceptos y ténicas
utilizadas en el análisis y construcción de compiladores, a continuaión se hace una
descripción de los temas a cubrir.
1.
2.
3.
4.
5.
Estructura básica de un compilador, identificando cada una de sus partes y la
función que cumple , además se hace un recorrido por los diferentes tipos de
compiladores y su importancia en la construcción de software.
Análisis de un traductor de espresiones infijas a postfijas, el cual se contruye con
algunas de las ténicas que se estudian en el curso.
Un recorrido por algunas de las técnicas del estudio de los analizadores léxicos,
interpretación de expresiones regulares, las máquinas de estado finito, aplicandolo
en la construcción de un analizador de texto.
Estudio de las principales características del análisis sintáctico de profundidad,
abarcando desde los conceptos de los métodos descendentes recursivos hasta las
técnicas LR computacionalmente más instensivas que se ahn empleado en los
generadores de analizadores sintácticos.
Estudio de las técnicas fundamentales de la traducción de código dirigida por la
sintaxis, utilizando concepto como: árboles sintacticos, grafos dirigidos, traducción
ascendente y evaluadores recursivos.
6. PRINCIPIOS DE FORMACIÓN
Generar en el estudiante las competencias necesarias para el trabajo
autónomo a partir de la asignación de trabajos, talleres, ensayos que deberá
elaborar en su tiempo de trabajo independiente y socializar en el aula de
clase.
El estudiante deberá presentar ante el grupo sus avances y logros en el
aprendizaje de los conceptos fundamentales y podrá aportar ideas y
conceptos necesarios la construcción de un conocimiento colectivo.
El estudiante deberá realizar trabajos en grupo en grupo que favorezcan su
desarrollo integral como individuo dentro de una sociedad y de igual forma
podrá presentar sus idas y conceptos los cuales serán valorados de forma
cuantitativa y cualitativa.
El desarrollo de estos trabajos pretenderán fundamentalmente generar
espacios para el desarrollo de competencias de lectura, escritura a nivel
argumentativo y expositivo a demás de fomentar el desarrollo de
competencias investigativas.
7. ARTICULACIÓN DEL CURSO CON LOS PROPÓSITOS, PRINCIPIOS,
CAMPOS, NÚCLEOS DE FORMACIÓN EN EL MARCO DEL DISEÑO
CURRICULAR
El desarrollo del curso de Compiladores, además de la metodología propuesta,
exige el desarrollo de estilo de aprendizaje para aprender haciendo,
reflexionando. Busca incentivar al estudiante para que acepte que lo que no se
hace no se aprende.
8. ACTIVIDADES DE INTEGRACIÓN
Productos de las actividades de integración

Ensayo

Mapa conceptual

Elaboración de preguntas

RAE (Resumen Analítico de Estudio)

Protocolo

Consultas por la Web
9. PRESENTACIÓN Y SUSTENTACIÓN DEL MATERIAL PEDAGÓGICO
El material pedagógico a utilizar en el desarrollo del curso es: Compiladores:
Principios, Técnicas y Herramientas escrito por AHO, Alfred V. y Otros de la
editorial Adisson – Wesley.
Este material da un cubrimiento total de los conceptos y técnicas que se
desarrollan en el curso, además de acompañar el desarrollo de los temas con
variados ejercicios y finalizando con algunos ejercicios de complejidad
incremental.
10. ENLACES EN LA WEB.
Análisis de algunos compiladores
http://www.geocities.com/pretabbed/compiladores.htm
Esta es la página principal de la cátedra Compiladores e Intérpretes de la Facultad de
Matemática Aplicada de la Universidad Católica de Santiago del Estero (Argentina).
http://www.ucse.edu.ar/fma/compiladores/
Estudio compiladores Universidad Politécnica de Madrid
http://www-lt.ls.fi.upm.es/compiladores/
Estudio compiladores Universidad Politécnica de Cataluña
http://www.lsi.upc.edu/~ggodoy/cl.html
Flex: Un generador de analizadores léxicos rápidos
http://es.tldp.org/Manuales-LuCAS/FLEX/flex-es-2.5.html
Introducción a los generadores de analizadores léxicos y sintácticos FLEX y
BISON
http://informatica.uv.es/docencia/iiguia/asignatu/2000/PL/2005/calculadora.pdf
El generador de analizadores léxicos lex Teoría de Autómatas y lenguajes
formales Federico Simmross Wattenberg ([email protected]) Universidad
de Valladolid.
http://www.infor.uva.es/~mluisa/talf/docs/labo/L3.pdf
Principios de Autómatas finitos
http://delta.cs.cinvestav.mx/~gmorales/ta/ta.html
Teoría de autómatas y lenguajes formales
http://perseo.dif.um.es/~roque/talf/Material/Tema3-printout.pdf
Alfabetos, cadenas y lenguajes
http://eisc.univalle.edu.co/materias/Computabilidad/material/slidesautomatas.pdf
Gramáticas libes del contexto
http://www.exa.unicen.edu.ar/catedras/ccomp1/Apunte5.pdf
Gramáticas libes del contexto
http://www.dsi.uclm.es/asignaturas/42528/TALFTema8.pdf
Catalog of Free Compilers and Interpreters
http://www.idiom.com/free-compilers/
Introduction to Finite Automata
http://www.cs.odu.edu/~toida/nerzic/390teched/regular/fa/intr_2_fa.html
Finite autómata
http://www.ma.hw.ac.uk/~markl/preprints/Lawson.pdf
CS4-Theory of Finite Automata (4.5+3)
http://decsai.ugr.es/~jags/fat.html
Regular Expression Matching Using Finite Automata (in C++)
http://www3.sympatico.ca/dbiggar/FA.home.html
Finite automata and arithmetic
http://www.emis.de/journals/SLC/opapers/s30allouche.pdf
11. PRODUCTOS FINALES DEL CURSO
Los estudiantes deben desarrollar un proyecto computacional de aplicación de
los conceptos fundamentales adquiridos en el curso, el cual deberán desarrollar
en lenguaje C++ o Java, deberán realizar una presentación y sustención.
12. METODOLOGIA
El desarrollo del curso se da en el marco de un proceso de educación a distancia
basado en procesos de autoformación, autonomía, autoaprendizaje, fomentando
el desarrollo de cimpetencias argumentativas e investigativas.
El docente realiza la presentación de los conceptos fundamentales, proponiendo
ejercicios de aplicación y el desarrollo de talleres.
Los estudiantes presentarán los resultados obtenidos en sus actividades de
trabajo individual y al final se realizará el resumen de las actividades.
13. PRESENTACION Y SUSTENTACION DE LAS UNIDADES INTEGRALES DEL
CURSO

NUCLEO NÚMERO 1: Introducción a la compilación
TIEMPOS
o
o
o
TIEMPO TOTAL DEL NÚCLEO :
TIEMPO PRESENCIAL
:
TIEMPO INDEPENDIENTE
:
Cuatro horas y treinta minutos
Una hora y treinta minutos
Tres horas
CONTENIDO TEMATICO DEL NUCLEO
:
Compiladores
Análisis de programa fuente
Fases de un compilador
Agrupamiento de las fases
Herramientas para la construcción de compiladores
MOMENTO DE SENSIBILIZACIÓN
¿Es lo mismo un compilador que un interpretador?
¿Cuál es la importancia de los compiladores en el mundo de la
computación?
¿Qué características permiten medir la eficiencias de un compilador?
COMPETENCIAS DEL NÚCLEO PROBLÉMICO



Cognitivas
Valorativas
Comunicativas
ACTMDADES DE INTEGRACIÓN
Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el
tema y donde se busque la apropiación del conocimiento para poder
desarrollar las unidades a continuación.
Lecturas individual y por cipas.
Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas.
Aclaración de dudas individual y por cipas.
ACREDITACION DEL NÚCLEO PROBLÉMICO
Tener claros los conceptos de la construcción de compiladores y su
importancia en la aplicación de un lenguaje de programación a la solución de
un problema.

NUCLEO NÚMERO 2: Compilador de una pasada
TIEMPOS



TIEMPO TOTAL DEL NÚCLEO :
TIEMPO PRESENCIAL
:
TIEMPO INDEPENDIENTE
:
Cuatro horas y treinta minutos
Una hora y treinta minutos
Tres horas
CONTENIDO TEMATICO DEL NUCLEO
:
Definición de la sintaxis
Traducción dirigida por la sintaxis
Análisis sintáctico
Traducción de expresiones simples
Análisis léxico
Incorporación de una tabla de símbolos
Máquinas de pila abstractas
MOMENTO DE SENSIBILIZACIÓN
¿Es lo mismo un análisis sintáctico que uno léxico?
¿Cuándo es conveniente la utilización de análisis sintáctico y cuando léxico?
¿Un compilador se basa de forma exclusiva en análisis sintáctico o léxico?
COMPETENCIAS DEL NÚCLEO PROBLÉMICO



Cognitivas
Valorativas
Comunicativas
ACTMDADES DE INTEGRACIÓN
Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el
tema y donde se busque la apropiación del conocimiento para poder
desarrollar las unidades a continuación.
Lecturas individual y por cipas.
Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas.
Aclaración de dudas individual y por cipas.
ACREDITACION DEL NÚCLEO PROBLÉMICO
Tener claros los conceptos del análisis sintáctico y el análisis léxico, así
como también su importancia en la aplicación de un lenguaje de
programación a la solución de un problema.

NUCLEO NÚMERO 3: Análisis léxico
TIEMPOS



TIEMPO TOTAL DEL NÚCLEO :
TIEMPO PRESENCIAL
:
TIEMPO INDEPENDIENTE
:
Cuatro horas y treinta minutos
Una hora y treinta minutos
Tres horas
CONTENIDO TEMATICO DEL NUCLEO
:
Funciones del analizador léxico
Manejo de los buffer de entrada
Especificación de los componentes léxicos
Un lenguaje para la especificación de analizadores léxicos
Autómatas finitos
Paso de una expresión regular a un AFN
Diseño de un generador de analizadores léxicos
MOMENTO DE SENSIBILIZACIÓN
¿Cómo se puede modelar un analizador léxico a partir de una AFD y un
AFN?
¿Cuál es la utilidad de una analizador léxico en la construcción de un
compilador?
COMPETENCIAS DEL NÚCLEO PROBLÉMICO



Cognitivas
Valorativas
Comunicativas
ACTMDADES DE INTEGRACIÓN
Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el
tema y donde se busque la apropiación del conocimiento para poder
desarrollar las unidades a continuación.
Lecturas individual y por cipas.
Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas.
Aclaración de dudas individual y por cipas.
ACREDITACION DEL NÚCLEO PROBLÉMICO
Tener claros los conceptos del análisis sintáctico y el análisis léxico, así
como también su importancia en la aplicación de un lenguaje de
programación a la solución de un problema.

NUCLEO NÚMERO 4: Análisis sintáctico
TIEMPOS



TIEMPO TOTAL DEL NÚCLEO :
TIEMPO PRESENCIAL
:
TIEMPO INDEPENDIENTE
:
Cuatro horas y treinta minutos
Una hora y treinta minutos
Tres horas
CONTENIDO TEMATICO DEL NUCLEO
:
El papel del analizador sintáctico
Gramáticas independientes del contexto
Escritura de una gramática
Análisis sintáctico descendente
Análisis sintáctico ascendente
Análisis sintáctico por precedencia de operadores
Analizadores sintácticos L R
Uso de gramáticas ambiguas
MOMENTO DE SENSIBILIZACIÓN
¿Son las gramáticas libres de contexto fundamentales en la construcción de
compiladores?
¿El concepto de gramática ambigua impide el desarrollo de analizadores
sintácticos?
¿Qué diferencias fundamentales existen entre un análisis descendente y un
ascendente?
COMPETENCIAS DEL NÚCLEO PROBLÉMICO



Cognitivas
Valorativas
Comunicativas
ACTMDADES DE INTEGRACIÓN
Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el
tema y donde se busque la apropiación del conocimiento para poder
desarrollar las unidades a continuación.
Lecturas individual y por cipas.
Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas.
Aclaración de dudas individual y por cipas.
ACREDITACION DEL NÚCLEO PROBLÉMICO
Tener claros los conceptos del análisis sintáctico y el análisis léxico, así
como también su importancia en la aplicación de un lenguaje de
programación a la solución de un problema.

NUCLEO NÚMERO 5: Traducción Dirigida por la sintaxis
TIEMPOS



TIEMPO TOTAL DEL NÚCLEO :
TIEMPO PRESENCIAL
:
TIEMPO INDEPENDIENTE
:
Cuatro horas y treinta minutos
Una hora y treinta minutos
Tres horas
CONTENIDO TEMATICO DEL NUCLEO
:
Definiciones dirigidas por la sintaxis
Construcción de árboles sintácticos
Evaluación ascendente de definiciones con atributos sintetizados
Definiciones con atributos por la izquierda
Traducción descendente
Evaluación ascendente de los atributos heredados
Evaluadores recursivos
MOMENTO DE SENSIBILIZACIÓN
¿Qué tipos de árboles son usados en la construcción de compiladores?
¿Cuáles son las diferentes técnicas de análisis de sintaxis utilizadas a través
de árboles?
¿Cómo se pueden construir evaluadores recursivos?
COMPETENCIAS DEL NÚCLEO PROBLÉMICO



Cognitivas
Valorativas
Comunicativas
ACTMDADES DE INTEGRACIÓN
Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el
tema y donde se busque la apropiación del conocimiento para poder
desarrollar las unidades a continuación.
Lecturas individual y por cipas.
Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas.
Aclaración de dudas individual y por cipas.
ACREDITACION DEL NÚCLEO PROBLÉMICO
Tener claros los conceptos de árboles de análisis sintáctico, así como
también su importancia en la aplicación de un compilador de un lenguaje de
programación.

NUCLEO NÚMERO 6: Comprobación de tipos
TIEMPOS



TIEMPO TOTAL DEL NÚCLEO :
TIEMPO PRESENCIAL
:
TIEMPO INDEPENDIENTE
:
Cuatro horas y treinta minutos
Una hora y treinta minutos
Tres horas
CONTENIDO TEMATICO DEL NUCLEO
:
Sistemas de tipos
Especificación de un comprobador de tipos sencillo
Equivalencia de expresiones de tipos
Conversiones de tipos
Sobrecarga de funciones y operadores
Funciones polimórficas
MOMENTO DE SENSIBILIZACIÓN
¿Cómo un compilador puede manejar los diferentes tipos de datos definidos
en un lenguaje de programación?
¿Cuál es la función de un comprobador de tipos en un compilador?
¿Cómo la sobrecarga de funciones y de operadores permiten el análisis de
los diferentes tipos y su manejo?
COMPETENCIAS DEL NÚCLEO PROBLÉMICO



Cognitivas
Valorativas
Comunicativas
ACTMDADES DE INTEGRACIÓN
Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el
tema y donde se busque la apropiación del conocimiento para poder
desarrollar las unidades a continuación.
Lecturas individual y por cipas.
Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas.
Aclaración de dudas individual y por cipas.
ACREDITACION DEL NÚCLEO PROBLÉMICO
Tener claros los conceptos de lenguajes de programación basados en tipos,
así como también su importancia de esto en la construcción de un
compilador.

NUCLEO NÚMERO 7: Generación de código
TIEMPOS



TIEMPO TOTAL DEL NÚCLEO :
TIEMPO PRESENCIAL
:
TIEMPO INDEPENDIENTE
:
Cuatro horas y treinta minutos
Una hora y treinta minutos
Tres horas
CONTENIDO TEMATICO DEL NUCLEO
:
Lenguajes intermedios
Declaraciones
Proposiciones de asignación
Expresiones booleanas
Proposiciones case
Llamadas a procedimientos
Aspectos de diseño de un generador de códigos
La máquina objeto
Administración de la memoria durante la ejecución
Bloques básicos y grafos de flujo
Un generador de código simple
Distribución y asignación de registros
Optimización mediante mirilla
Algoritmo de generación de código con programación dinámica
MOMENTO DE SENSIBILIZACIÓN
¿Cuáles son las características a tener en cuenta a la hora de construir un
lenguaje de programación?
¿Cuáles son las estructuras básicas que se deben tener en un lenguajes de
programación y cómo se modelan desde el punto de vista del compilador?
¿Cómo se puede construir un generador de código?
COMPETENCIAS DEL NÚCLEO PROBLÉMICO



Cognitivas
Valorativas
Comunicativas
ACTMDADES DE INTEGRACIÓN
Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el
tema y donde se busque la apropiación del conocimiento para poder
desarrollar las unidades a continuación.
Lecturas individual y por cipas.
Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas.
Aclaración de dudas individual y por cipas.
ACREDITACION DEL NÚCLEO PROBLÉMICO
Tener claros los conceptos de la construcción de generadores de código, así
como también su importancia en la construcción de un lenguaje de
programación.

NUCLEO NÚMERO 8: Optimización de código
TIEMPOS



TIEMPO TOTAL DEL NÚCLEO :
TIEMPO PRESENCIAL
:
TIEMPO INDEPENDIENTE
:
Cuatro horas y treinta minutos
Una hora y treinta minutos
Tres horas
CONTENIDO TEMATICO DEL NUCLEO
:
Las principales fuentes para la optimización
Optimización de bloques básicos
Lazos en los grafos de flujo
Análisis global de flujo de datos
Solución iterativa de las ecuaciones de flujo de control
Transformaciones para mejorar el código
Tratamientos con sinónimos (Alias)
Análisis de flujo de datos de grafos de flujo estructurados
Algoritmos eficientes para el flujo de datos
MOMENTO DE SENSIBILIZACIÓN
¿Es fundamental la utilización de alguna estrategia de optimización de
código?
¿Cuál podría ser una estrategia adecuad para la optimización de código?
¿Cuál es la función de un grafos de flujo y de una flujo de control en la
optimización de código?
COMPETENCIAS DEL NÚCLEO PROBLÉMICO



Cognitivas
Valorativas
Comunicativas
ACTMDADES DE INTEGRACIÓN
Realizar una plenaria en la cual se discutan las lecturas realizadas sobre el
tema y donde se busque la apropiación del conocimiento para poder
desarrollar las unidades a continuación.
Lecturas individual y por cipas.
Ejercicios prácticos realizados por el tutor, cipas - tutor, cipas.
Aclaración de dudas individual y por cipas.
ACREDITACION DEL NÚCLEO PROBLÉMICO
Tener claros los conceptos del análisis sintáctico y el análisis léxico, así
como también su importancia en la aplicación de un lenguaje de
programación a la solución de un problema.
14. ACREDITACIÓN GENERAL DEL CURSO
El estudiante aprobará el curso si ha logrado incorporar los conceptos
fundamentales en la construcción de compiladores y se los puede aplicar en la
solución de un problema generl planteado por el tutor.
15. MATERIAL DE CONSULTA RECOMENDADO
El material pedagógico a utilizar en el desarrollo del curso es: Compiladores:
Principios, Técnicas y Herramientas escrito por AHO, Alfred V. y Otros de la
editorial Adisson – Wesley.
16. BIBLIOGRAFÍA



Advanced Compiler Design and Implementation de Muchnick
Modern Compiler Implementation in C de Andrew Appel
FRASER, Christopher and HANSON, David R. A retargetable C compiler:
design and implementation. Menlo Park, CA., Addison Wesley, 1995.




HOLUB, Allen. Compiler design in C. Englewood Cliffs, N.J., Prentice Hall,
1990.
PITTMAN, Thomas and PETERS, James. The art of compiler design: theory
and
practice. Englewood Cliffs, N.J., Prentice Hall, 1992.
WIRTH, Niklaus. Compiler construction. Harlow, England, Addison Wesley,
1996.
Descargar