You are on page 1of 3

Contenido de Procesadores de Lenguajes

Introduccin
Fases existentes en la construccin de un compilador. Funciones de cada fase.
Tratamiento de tablas de smbolos y manejo de errores de distintos tipos. Utilizacin de
gramticas. Reconocimiento de una cadena. Concepto de derivacin. rboles de
derivacin. Gramticas ambiguas, y su problemtica. El ejemplo del else ambiguo.
Otros ejemplos. La eliminacin de la ambigedad.
Anlisis lxico
Uso de gramticas regulares y autmatas finitos. Relacin con el analizador sintctico.
Componentes lxicos, patrones y lexemas. Atributos de los componentes lxicos. Uso
de caracteres de lookahead. Tratamiento de los errores lxicos. Manejo de buffers de
entrada. Uso de buffers con centinelas. Expresiones regulares. Gramticas extendidas
con expresiones regulares. Relacin de las expresiones regulares con los autmatas
finitos. Conversin de expresiones reglares a autmatas finitos no determinsticos.
Conversin de autmatas finitos no determinsticos a determinsticos. Minimizacin de
estados de un autmata finito determinstico. Implementacin utilizando autmatas.
Anlisis sintctico
Uso de gramticas libres de contexto. Derivaciones y rboles de derivacin.
Anlisis sintctico descendente. Limitaciones y ventajas. Derivaciones por la izquierda.
El problema de las gramticas recursivas a izquierda. Eliminacin de la recursin a
izquierda. El problema del cambio de asociatividad de izquierda a derecha.
Factorizacin de gramticas por la izquierda. Simplificacin de gramticas. Anlisis
sintctico predictivo recursivo. Generacin de diagrama de transiciones para cada no
terminal a partir de la gramtica resultante. Simplificacin de estos diagramas de
transiciones. Generacin de cdigo de anlisis para cada no terminar a partir de los
diagramas respectivos. Reconocimiento de cadenas usando analizadores sintcticos
predictivos recursivos. Anlisis sintctico predictivo no recursivo. Componentes. Tabla
de anlisis sintctico no recursivo (no terminales x terminales). Pila de anlisis
sintctico. Algoritmo de reconocimiento de cadenas usando analizadores sintcticos
predictivos no recursivos, con la tabla. Funciones primero y siguiente. Construccin de
las tablas de anlisis sintctico descendente no recursivo. Analizadores sintcticos
LL(1). Tratamiento y recuperacin de errores en el anlisis sintctico predictivo
descendente.
Anlisis sintctico ascendente. Derivacin reversa por la derecha. Concepto de
mangos. Poda de mangos. Uso de una pila durante el anlisis sintctico ascendente.
Desplazamientos y reducciones durante el anlisis sintctico ascendente. Prefijos
viables. Conflictos entre desplazamientos y reducciones.
Analizadores sintcticos LR. Tabla de anlisis sintctico LR. Algoritmo de
reconocimiento de cadenas usando analizadores sintcticos ascendentes LR, con la
tabla. Anlisis sintctico SLR y construccin de sus tablas (la operacin de clausura y la
construccin de los conjuntos de elementos -estados-). Construccin de tablas de LR
cannico. Uso de caracteres de lookahead. Ejemplos de gramticas que son LR(1) y no
son LR(0)/SLR. Analizadores sintcticos LALR. Construccin de tablas LALR a partir
de las tablas de LR(1). Unin de estados de igual corazn. Presentacin de conflictos
reduccin-reduccin. Construccin eficiente de tablas LALR (desde el inicio, sin partir
de las tablas de LR(1)).
Tratamiento y recuperacin de errores en el anlisis sintctico ascendente.

Anlisis semntico
Reglas semnticas. Gramtica de atributos y traduccin dirigida por la sintaxis.
Ejemplos de gramticas con reglas semnticas. Atributos sintetizados y heredados.
Ejemplos de uso de atributos en rboles de derivacin. Grafos de dependencias de
atributos. Orden de evaluacin de atributos versus recorrido de derivacin en rbol
sintctico. Gramticas de atributos L-atribuidas. Orden de obtencin de valores de
atributos heredados y sintetizados durante el proceso del anlisis sintctico. Generacin
de rboles sintcticos como atributos de smbolos no terminales.
Evaluacin de atributos en anlisis descendente. Aplicacin de reglas semnticas antes
y despus del recorrido por cada smbolo de partes derechas de producciones. Cambio
en la pila de anlisis descendente no recursivo para la representacin de atributos (pila
auxiliar de atributos, o atributos dentro de la pila tradicional de anlisis descendente).
La solucin al problema del cambio de asociatividad de izquierda a derecha por la
factorizacin. Uso de recursin de cola en lugar de recursin de pila en clculo de
valores de atributos.
Evaluacin de atributos en anlisis ascendente. Aplicacin de reglas semnticas al
finalizar el recorrido completo de partes derechas de producciones. Cambio en la pila de
anlisis ascendente para la representacin de atributos (pila auxiliar de atributos, o
atributos dentro de la pila tradicional de anlisis descendente). El problema de la posible
necesidad de acciones semnticas intermedias. Uso de nuevos smbolos no terminales
ficticios para acciones semnticas intermedias. El problema de la evaluacin de
atributos heredados. Acceso a atributos del contexto en la pila (atributo de los
hermanos por la izquierda o del padre). El problema de no poder determinarse la
posicin contextual de los atributos de los hermanos izquierdos o del padre en la pila.
Nuevo uso de los nuevos smbolos no terminales ficticios para copia de atributos.
Sustitucin en algunos casos de atributos heredados por sintetizados (cambiando la
gramtica).
Chequeo de tipos.
Utilizacin dentro de las acciones semnticas. Utilizacin de atributos para la definicin
de tipos dentro de una gramtica. Expresiones y variables de tipo. Utilizacin de
atributos para las declaraciones de variables tipificadas. Utilizacin de atributos para la
verificacin de tipos en las expresiones. Concepto de equivalencia de tipos.
Conversiones explcitas y coercin. Inferencia de tipos. Un algoritmo de inferencia de
tipos. Tipificacin en funciones y operadores sobrecargados. Uso de variables de tipo en
funciones polimrficas.
Ambientes en tiempo de ejecucin.
Llamados entre rutinas. El problema de la representacin de memoria. Ambitos.
Memoria esttica, stack (pila de llamados) y heap. Variables estticas, semi-estticas y
dinmicas. Liberacin de memoria en variables dinmicas (explcita, conteo de
referencias, garbage collector). Los registros de activacin. Control links. Data links en
lenguajes con estructura de bloques. Otros componentes de los registros de activacin.
Responsabilidades de rutina llamadora y llamada en acceder/escribir los datos del
registro de activacin. Pasaje de parmetros. Binding esttico y dinmico de variables.
Representacin de vectores semi-estticos (de longitud fija dentro del mbito de una
rutina, pero con una longitud fija de otro tamao en otro mbito de la misma rutina).
Generacin de cdigo intermedio.

Relacin entre rbol sintctico con el cdigo intermedio. El cdigo de tres direcciones.
Representacin como ternas o como cudruplas. Tipos de instrucciones del cdigo de
tres direcciones. Ubicacin de los identificadores en memoria. Generacin de variables
temporales. Los atributos lugar y cdigo. Representacin interna de los tipos de datos.
Relacin con la tabla de smbolos. Referencias, desplazamientos e indirecciones.
Accesos a identificadores comunes y a vectores/matrices. Su relacin con la
administracin de memoria. Generacin de cdigo intermedio de las estructuras de
control. Generacin de cdigo intermedio de la evaluacin de expresiones aritmticas.
Generacin de cdigo intermedio de la evaluacin de expresiones lgicas (sin y con
cortocircuito). El problema del completado de labels-nmeros de lnea. Generacin de
cdigo intermedio de los llamados a procedimientos y funciones. El problema de la
generacin de labels nicos (en cdigo y en datos).
Generacin de cdigo.
Caractersticas comunes a los lenguajes de bajo nivel. Ensambladores. Caractersticas
del assembler de la arquitectura 8086/8088 (segmentos, direcciones de memoria,
registros, operaciones). El pasaje de parmetros en 8086/8088. Algunos problemas en la
generacin de cdigo. Las vinculaciones de variables y constantes string a memoria. La
relacin entre los vnculos de memoria con los tipos de variable (esttica, semi-esttica
y dinmica). Representacin de los ambientes.
Optativo: Generacin de cdigo ejecutable assembler 8086/8088. Diferencias con la
generacin de cdigo ensamblador 8086/8088.
Optimizacin de cdigo (algunas caractersticas)
Generacin mnima de temporales. Cmo evitar asignar constantes numricas a
temporales. Cmo evitar generar labels innecesarios. Cmo adjuntar solamente las
subrutinas externas necesarias. Otros criterios de optimizacin de cdigo.

You might also like