Electivo-Compiladores - Universidad de La Serena

Anuncio
UNIVERSIDAD DE LA SERENA
FACULTAD DE CIENCIAS
DEPARTAMENTO DE MATEMÁTICAS
1.
IDENTIFICACIÓN:
Carrera
Curso
Código
Nº Hrs.(TEL)
Prerrequisito
Periodicidad
2.
: Ingeniería en Computación
: Electivo (Introducción a la teoría de Compiladores)
: 23105
: 400
: Aprobada la asignatura de Teoría de Autómatas y Lenguajes Formales.
: Anual
PROGRAMA DE ESTUDIO
2.1. DESCRIPCIÓN:
El presente curso electivo ofrece al alumno el conocer y manejar uno de los aspectos más
importantes de la informática tradicional: el análisis y comprensión de archivos de texto, de
las más múltiples especies y formatos. Las técnicas y herramientas que se examinarán se
encuentran ampliamente difundidas y no están orientadas exclusivamente a la construcción
de compiladores e intérpretes, sino que establecen un marco general con el que el
informático puede analizar textos con cualquier otro objetivo. Cualquier transformación
semántica imaginable computacionalmente puede hacerse realidad, desde el procesamiento
de datos hasta la conversión de textos, pasando por la transformación de programas fuente,
entre otros.
No obstante, el propósito es desarrollar un compilador, como una de las aplicaciones más
complejas en el área de sistemas computacionales, esto es debido a que se necesita integrar
una serie de conocimientos, tales como, la programación de propósito general y las
estructuras de datos. Sin embargo, el desarrollo de un compilador puede facilitarse si se
analizan detalladamente cada una de las etapas que lo integran. Más aún, hoy en día, se
cuentan con una serie de herramientas que facilitan la construcción de los mismos, por lo
menos en las etapas clásicas, es decir, en el desarrollo de analizadores Léxico, Sintáctico,
Semántico, tal como se hizo en el curso recién dictado de Teoría de Autómatas y Lenguajes
Formales.
No obstante, la propuesta es llegar hasta una etapa en donde se pueda incursionar en la
Generación de código intermedio, Optimización de código, Manejo de errores y
Generación de código ensamblador, entre otros.
En la actualidad existen poderosas herramientas de desarrollo, los cuales integran un
ambiente de programación que generalmente incluye un editor, ambientes visuales,
depuradores, preprocesadores, un compilador, funciones de biblioteca de propósito general,
etc.
Por lo anterior, se propone escoger y manejar las herramientas existentes más apropiadas en
este ámbito -“nuevas y antiguas”- con el propósito de compararlas y con ellas llegar a
construir un compilador, como objeto de estudio, junto a las herramientas que lo hicieron
factible.
2.2.
OBJETIVOS EDUCACIONALES
2.2.1. OBJETIVOS GENERALES
Aplicar los conceptos de los lenguajes formales en el proceso de construcción de
compiladores, y el estudio y manejo de las herramientas apropiadas para la consecución de
los objetivos.
2.2.2. OBJETIVOS ESPECÍFICOS
 Explorar las principales herramientas en el contexto de analizadores lexicográficos,
sintácticos y semánticos relacionados con los lenguajes formales.
 Entender cómo y cuándo usar las herramientas disponibles en el contexto del
análisis predictivos de las sentencias.
 Cumplir con todas las etapas conducentes a la construcción de un compilador o lo
más cercano que se pueda lograr a ello. En este sentido, es fundamental conocer,
manejar y aplicar eficientemente las herramientas existentes para ponerlas en
práctica.
 Los estudiantes tendrán una visión global de la importancia que ha tenido la
integración de la teoría y la práctica, y la ventaja de conocer los ámbitos de algunos
problemas que puedan ser resueltos, con la experiencia que se recabe.
2.3. CONTENIDOS
CONTENIDO
1. Lenguajes Formales: Pasado, Presente y Futuro de los Lenguajes Formales en el
contexto de string, árboles y grafos.
2. Conociendo las herramientas apropiadas, en las cuales se incursionara. Por ejemplo,
Lex & Yacc, SableCC, JavaCC, que es una herramienta de Java la cual permite de
una manera más practica y fácil el desarrollo de un compilador, en su fase sintáctica
(gramática). Se apega en parte a las estrategias empleadas para la especificación de
reglas gramaticales llevadas en papel, como el BNF( Backus Naur Form) por
ejemplo.
3. Entre otras, JFlex y CUP, ANTLR genera los “recursive descent parser” en C, C++
o Java desde gramáticas LL(k>1). La última versión puede ser usado para C++ y
Java.
4. Correlacionar los conceptos teóricos que sustentan las herramientas anteriores. Por
ejemplo, lex/yacc es que los analizadores sintácticos generados por JavaCC son
analizadores sintácticos descendentes de tipo LL(k), mientras que los analizadores
sintácticos generados por yacc son de tipo ascendente LALR, es decir, autómatas
PushDown.
5. Conociendo las herramientas apropiadas en la generación de árboles. Por ejemplo,
TREEBAG.
6. Introducción a Compiladores. Análisis léxico. Análisis sintáctico, Análisis
sintáctico predictivo, Análisis semántico, generación de código, Optimización de
códigos.
7. Finalmente se ejemplifican los analizadores léxicos en entornos web. La idea es
utilizar las herramientas antes vistas en un contexto que difiere considerablemente
del análisis del código fuente C. Por ejemplo, en los lenguajes HTML, XML,
LATEX, y en las especificaciones HL7.
2.4. ESTRATEGIAS
Para cumplir con los objetivos se realizan las clases mediante la presentación de los
contenidos, fundamentos y ejemplos, además de la participación activa de los alumnos en
exposiciones de temas relacionados con los contenidos.
2.5. EVALUACIÓN
Controles basados en exposiciones, asistencia, y cumplimiento de los proyectos que surjan
en la asignatura. Presentación de los temas abordados en un Script (documento digitalizado
con los temas que se abordaron y las propuestas realizadas ).
2.6.
1.
2.
3.
4.
5.
6.
BIBLIOGRAFÍA:
http://sablecc.org/
https://javacc.dev.java.net/
http://www.antlr.org/
http://catalog.compilertools.net/
https://www8.cs.umu.se/~drewes/treebag/
JAVA A TOPE: TRADUCTORES Y COMPILADORES CON LEX/YACC,
JFLEX/CUP Y JAVACC. EDICIÓN ELECTRÓNICA.
7. Copyright © 2010 Terence Parr.
Descargar