Modernización de la Enseñanza de la Traducción
Manuel E. Bermúdez, Ph.D.
University of Florida
Gainesville, FL
http://www.cise.ufl.edu
Año Sabático en ULA, Mérida, Venezuela
CIESC, La Paz, 30 de setiembre, 2003
2
Resumen La declinación del curso tradicional de
compiladores. ¿Por qué reformar el curso ? El nuevo diseño del curso:
– Objetivos.– Reorganización del material.– Contraste con el diseño antiguo.
Aplicaciones.
CIESC, La Paz, 30 de setiembre, 2003
3
Objetivos del curso tradicional de compiladores
Discutir las fases de un compilador, los modelos matemáticos relevantes,y los paquetes disponibles:– Análisis léxico (lenguajes regulares, lex)– Análisis sintáctico (lenguajes libres de contexto, yacc).– Análisis de semántica estática.– Generación de código.– Optimización de código.
Implementar (parte de) un compilador.
CIESC, La Paz, 30 de setiembre, 2003
4
El curso tradicional de Compiladores
Hasta hace algunos años, se consideraba “indispensable”.
En declinación hoy día, en muchos programas.– Se ofrece menos a menudo.– Hay menos instructores.– Hay menos estudiantes.
CIESC, La Paz, 30 de setiembre, 2003
5
Razones para la declinación
Madurez del área. Proliferación de lenguajes y paradigmas, cursos en
estos temas son más frecuentes. Curriculum ACM 2001: Profesora Mary Shaw (CMU):
termodinámica vs. diseño de calderas, principios vs. artefactos. Compiladores y Sistemas Operativos son artefactos dinosaurios.
Muy pocos graduados diseñan o mantienen compiladores.
Cada día hay menos profesores en el área (fuga a Microsoft ).
CIESC, La Paz, 30 de setiembre, 2003
6
Problemas con el curso tradicional de compiladores
El curso se considera obsoleto. El material ya no se considera indispensable.
El material se considera “especializado”, “opcional” en el curriculum.
El objetivo de construir un compilador “de verdad” se considera obsoleto.
CIESC, La Paz, 30 de setiembre, 2003
7
Problemas con el curso tradicional de compiladores
(cont.) El proyecto no compagina con el material
del curso. Trabajo en equipo en el proyecto es
frustrante: para implementar una fase, se necesita saber de las demás fases.
Curso “novela de misterio”. Un curso “esotérico” y “difícil”. Poco
popular.
CIESC, La Paz, 30 de setiembre, 2003
8
Problemas con el curso tradicional de compiladores
(cont.) El libro de texto: Construcción de
Compiladores: Principios, Técnicas y Herramientas, Addison-Wesley, 1986, segunda (última) edición, Aho, Sethi, Ullman.
Todos están de acuerdo (incluyendo los tres autores): el libro es demasiado grande, y carece de pedagogía. No habrá tercera edición.
CIESC, La Paz, 30 de setiembre, 2003
9
Problemas con el curso tradicional de compiladores
(cont.) Todos los demas libros (SÍ, TODOS) son la
versión resumida favorita del autor, del material en el Dragón Rojo.
Los mismos temas, en el mismo orden. Profesores (des)enfatizan sus temas
favoritos (o los que conocen). Mala pedagogía.
CIESC, La Paz, 30 de setiembre, 2003
10
¿Por qué reformar el curso de compiladores ?
El curso agoniza, pero no muere. Tiene contenido importante que
TRANSCIENDE el tema de compiladores:– Reconocimento sintáctico (lenguajes
regulares, libres de contexto, lex, yacc).– Traducción de lenguajes artificiales.– Un proyecto de software de tamaño
significativo.
CIESC, La Paz, 30 de setiembre, 2003
11
Por que reformar el curso de compiladores ?
El curso necesita la transición filosófica de “artefacto” (compilador) a “mecanismo” (traductor).
HAY QUE HACER ALGO CON EL CURSO, y abolirlo no es una opción.
CIESC, La Paz, 30 de setiembre, 2003
12
El Nuevo Diseño
Se llamará TRADUCCIÓN DE LENGUAJES. Orientado hacia el proyecto. Sólo el material teórico relevante. NO se implementa un compilador desde cero. Se EXTIENDE un compilador dado, para un
lenguaje imperativo mínimo: variables enteras, ‘+’, ‘-’ unario, ‘<=‘, asignación, secuencia, ‘if’, ‘while’.
CIESC, La Paz, 30 de setiembre, 2003
13
Gramática de “Tiny” Tiny -> 'program' Name ':' Dclns Block '.' Dclns -> 'var' (Dcln ';')+ -> Dcln -> Name list ',' ':' Type Type -> 'integer' -> 'boolean‘ Block -> '{' Statement list ';' '}' Statement -> Name '=' Expression -> 'output' '(' Expression ')' -> 'if' '(' Expression ')' Statement 'else' Statement -> 'while' '(' Expression ')' Statement -> Block Expression -> Term -> Term '<=' Term Term -> Term '+' Primary -> Term Primary -> '-' Primary -> 'read' -> Name -> '<integer>' -> '(' Expression ')' Name -> '<identifier>'
CIESC, La Paz, 30 de setiembre, 2003
14
El Nuevo DiseñoDISEÑO VIEJO DISEÑO NUEVO
1.Introducción. 1. Introducción.
2.Descripción del lenguaje. 2. Descripción del traductor.
3. Análisis léxico. 3.Traducción de operadores.
4. Análisis sintáctico. 4. Traducción de instrucciones.
5. Análisis de semántica estática. 5. Traducción de tipos de datos.
6. Generación de código. 6. Traducción de subrutinas.
7. Optimización de código. 7. Traducción de estructuras. estáticas (vectores).
8. Estructuras de ejecución, 8. Traducción de estructuras
generación de código final. dinámicas (punteros).
CIESC, La Paz, 30 de setiembre, 2003
15
El Diseño TradicionalAnálisis léxico
Análisis sintáctico
Semántica estática
Generación de código
Operadores
Instrucciones
Tipos de datos
Subrutinas
Estructuras estáticas
Estructuras dinámicas
DISEÑO TRADICIONAL: POR COLUMNA , en el orden dictado por el compilador (???)
CIESC, La Paz, 30 de setiembre, 2003
16
El Diseño NuevoAnálisis léxico
Análisis sintáctico
Semántica estática
Generación de código
Operadores
Instrucciones
Tipos de datos
Subrutinas
Estructuras estáticas
Estructuras dinámicas
DISEÑO NUEVO: POR FILA, en espiral, en orden ascendente de complejidad.
CIESC, La Paz, 30 de setiembre, 2003
17
El Diseño Nuevo
Principios filosóficos fundamentales:– Orden de eventos pedagógico
Orden de eventos en el compilador.
– Conservar los tópicos fundamentales en el tema de traducción, que TRANSCIENDEN el tema:
Análisis sintáctico (regular y libre de contexto) Experiencia con un programa GRANDE:
abstracción, mantenimiento.
– El objetivo NO es enseñar diseño de compiladores de producción.
CIESC, La Paz, 30 de setiembre, 2003
18
El Diseño Nuevo
Se elimina generación de código final. Se elimina optimización de código. Se elimina el problema de asignación de
registros. Se eliminan valores de punto flotante. Se utiliza una máquina virtual (JVM ?)
CIESC, La Paz, 30 de setiembre, 2003
19
Objetivos
Diseño viejo Diseño nuevo1.Fases del compilador. 1. 2.Modelos matemáticos. 2. (simplificados, luego ...)3. Herramientas. 3.
4. Análisis léxico. 4.5. Análisis sintáctico. 5. 6. Semántica estática. 6. 7. Generación de código. 7. (sólo código
intermedio)8. Optimización de código. 8.9. Implementar un compilador. 9. (extendiéndolo)10. Compilador de producción. 8.
CIESC, La Paz, 30 de setiembre, 2003
20
El Sistema Actual
Escrito en C, traducido de Pascal . Corre bajo UNIX y Linux. Utiliza lex y yacc (con un pre-procesador). El estudiante trabaja con 4 archivos:
– Especificación léxica (1 página).– Especificación sintáctica (1 página).– Analizador de semántica estática (400 líneas).– Generador de código (400 líneas).
CIESC, La Paz, 30 de setiembre, 2003
21
El Sistema Actual
CIESC, La Paz, 30 de setiembre, 2003
22
Investigación Previa Resultados de investigación 1982-1996:
– Versión sencilla y didáctica de análisis sintáctico LL(1) y descenso recursivo.
– Versión sencilla y didáctica de análisis sintáctico LR(0), SLR(1), y LALR(1).
– Publicaciones ...– Un juego de apuntes para el curso de
compiladores en UF (ofrecido anualmente)– Los misteriosos algoritmos LR ...
CIESC, La Paz, 30 de setiembre, 2003
23
Investigación Previa (cont.) Resultados de investigación 1996-1998:
– Intento de reforma al curso de compiladores.– Reforma hacia C++ y el paradigma de la
orientación a objetos.– Licencia sabática y Fulbright, Universidad de
Costa Rica.– Período Fulbright corto (6 meses), programa
de Master joven en la UCR.– Una tesis de M.Sc. en UFL, Youli Kanev,
1997.
CIESC, La Paz, 30 de setiembre, 2003
24
Actividades Recientes Tema retomado en 2001: curso de
compiladores en peligro de extinción ! Proyecto financiado por SUCCEED en
verano 2001: nuevas ideas en torno a recomendaciones ACM 2001.
2002-2003: Estudiantes (2 M.Sc., 1 Ph.D.) implementando el sistema en:– Java, C++, C#. (Windows, .NET)
Fulbright, para ULA, Mérida, Venezuela, 2003-2004.
CIESC, La Paz, 30 de setiembre, 2003
25
Planes para 2003-2004
Concluir implementaciones en Java, C++, C#. Apoyo financiero de Microsoft.
Artículo presentado 1/2003: SSGRR. Escribir propuesta de libro de texto, y
capítulos muestra. Diseñar contenido del libro en detalle. Negociar con casa editoriales
CIESC, La Paz, 30 de setiembre, 2003
26
Planes para 2003-04 en la ULA
Primer semestre: un seminario de pos-grado: buscar y describir aplicaciones fuera del área de compilación.
Segundo semestre: impartir el nuevo curso, para estudiantes de pre-grado.
A traves del año, escribir el libro de texto. Hora de cerrar 20 años de estudio de
compiladores.
CIESC, La Paz, 30 de setiembre, 2003
27
¿ Preguntas ?