Compiladores
Estudiar
Libro del Dragon (Compiladores: principios, técnicas y herramientas Ullman)
Analisis Sintactico predictivo no recursivo
Analisis Sintactico LR
Analisis Sintactico SLR (la S es de simple)
Analisis Sintactico LR ( 1 )
Traducción dirigida por la sintaxis
Atributos sintetizados
Atributos heredados
Grafos de dependencias
Construccion del Grafo de dependencias
Orden de Evaluacion
Ordenamiento topológico
Arbol sintactico
Comprobacion de tipos
Expresiones de tipo
Sistema de tipos
Comprobación estática y dinámica de tipos
sistema de tipos seguro
lenguaje fuertemente tipado
Especificacion de un comprobador de tipos sencillo
Comprobador de tipos
Un lenguaje simple
Comprobación de tipos en las expresiones, proposiciones y funciones
Equivalencia de expresiones de tipo
Equivalencia estructural de expresiones de tipo
Nombres para expresiones de tipos:
Conversiones de tipos.
SOBRECARGA DE FUNCIONES Y OPERADORES
función polimórfica
Variables de tipo
Un lenguaje con funciones polimórficas
Sustituciones, casos y unificación
Comprobación de funciones polimórficas
UNALGORITMO PARA LA UNIFICACION
Ambientes para el momento de la ejecucion
Definición de un Procedimiento
Arboles de activacion (Arboles de llamadas)
Recursividad
Pila de Control
Ámbito de una declaración
Enlace de Nombres
Ambiente
Estado
Enlace
Organizacion de la memoria
Registros de activacion ( marco )
Estrategias para la asignacion de memoria
La asignación por medio de una Pila
Acceso a nombres no locales
bloques
Regla de anidamiento mas cercano.
Paso de parametros
Llamada por valor y por referencia
Generacion de código intermedio
Código de tres direcciones
Declaraciones
Proposiciones de asignación
Acceso a elementos de matrices
Expresiones booleanas
Representation Numerica
Codigo en corto circuito
Capitulo 8 del Libro El entorno de programacion UNIX
Hoc 4 (Maquina virtual de pila)
Teorico
Maquina virtual
RAM, registros (program counter), pila, y conjunto de instrucciones
Practico (codigo)
variables stack, stackp, prog, progp y pc
funciones initcode, execute, code, constpush, varpush y add
Hoc 5 (Decisiones y ciclos)
funciones whilecode, ifcode, gt, and , or , y not
mapa de memoria de whilecode y ifcode
Hoc 6 (Funciones y procedimientos)
Teorico
Lenguaje (imperativo)
palabras reservadas, tipos de datos, operadores, estructuras de control,
marco de funcion, y mecanismo de llamada a funcion
Practico (codigo)
variables progbase y fp
funciones call, ret, define, getarg
mapa de memoria de call
Realizar practicas
Para realizar las practicas es necesario entender bien : Lenguaje C (o
java), YACC y la etapa correspondiente de HOC.
En las explicaciones siguientes suponga que de las opciones disponibles
para las practicas eligio complejos.
En la explicaciones no se detalla todo dependiendo en que orden y como
hagan lo de cada practica tendran que llenar algunos huecos las
explicaciones son para tener una idea de lo que hay que hacer.
Practica3 Tabla de simbolos
-Copie los archivos en la carpeta de HOC3 y los archivos de complejo a
una carpeta nueva. Modifique hoc.y (de HOC3) para que trabaje con
complejos es decir modifique la gramatica de manera similar a como la
modifico en HOC1.
-Modifique complejo_cal.l (el analizador lexico) para que reconozca
variables y las almacene en la tabla de simbolos. Hay opciones donde el
archivo con extension l no exite en ese caso modificar yylex (el
analizador lexico)
-Modifique el archivo complejo_cal.h es decir copie la estructura Symbol
de hoc.h a complejo_cal.h y modifique dicha estructura para que trabaje
con complejos.
-Modifique el archivo symbol.c es decir modifique lookup e install para
que trabajen con complejos.
-Modifique el archivo init.c es decir modifique la estructura de los
builtins para ofrecer las funciones del seno, coseno y exponencial
complejos.
-Corregir los errores de compilacion que puedan aparecer
-Probar el programa es decir ejecutelo y verificar si los resultados son
correctos usando Wolfram Alpha
Practica4 Maquina virtual de pila (primero compilar y ejecutar hoc4)
-Copie los archivos en la carpeta de HOC4 y los archivos de complejo de
la practica3 a una carpeta nueva. Modifique hoc.y (de HOC4) para que
trabaje con complejos.
-Modifique el archivo complejo_cal.h es decir copie la union Datum de
hoc.h a complejo_cal.h y modifique dicha union para que trabaje con
complejos.
-Modifique el archivo code.c es decir modifique las funciones add, sub,
mul , div, etc para que trabajen con complejos.
-Corregir los errores de compilacion que puedan aparecer
-Probar el programa es decir ejecutelo y verificar que hace lo mismo que
el programa de la Practica3
Practica5 Decisiones y ciclos (primero compilar y ejecutar hoc5)
-Copie los archivos en la carpeta de HOC5 y los archivos de complejo de
la practica4 a una carpeta nueva. Modifique hoc.y (de HOC5) para que
trabaje con complejos.
-Modifique el archivo code.c es decir modifique las funciones gt, ge,
lt, le, eq, ne, or y not para que trabajen con complejos.
-De ser necesario modifique las funciones whilecode e ifcode.
-Corregir los errores de compilacion que puedan aparecer
Practica6 Ciclo for
-Agregar a la gramatica las producciones para el for y en la acciones
gramaticales no olvidar colocar los STOPS necesarios.
-Dibujar el mapa de memoria del for
-Codificar la funcion forcode a partir mapa de memoria del for y agregar
dicha funcion al archivo code.c.
-Corregir los errores de compilacion que puedan aparecer
Practica7 Funciones y procedimientos (primero compilar y ejecutar hoc6)
-Copie los archivos en la carpeta de HOC6 y los archivos de complejo de
la practica6 a una carpeta nueva. Modifique hoc.y (de HOC6) para que
trabaje con complejos.
-Modifique el archivo complejo_cal.h es decir sustituya la estructura
Symbol de complejo_cal.h con la estructura Symbol del hoc.h ( de hoc6 )
y modifique dicha estructura para que trabaje con complejos.
-Corregir los errores de compilacion que puedan aparecer
-Probar el programa con funciones recursivas como la version recursiva de
la funcion para elevar un complejo a una potencia entera. Es decir
escriba la definicion de la funcion potencia usando el lenguaje generado
por la gramatica de la Practica7 y escriba la llamada a dicha funcion y
ejecute dicho programa en su interprete (recuerde hoc es un interprete).
Nota: el codigo original de hoc esta en muchas paginas de internet
Resolver la Guia 2
Resolver la Guia 3