Sie sind auf Seite 1von 6

Generacin de cdigo intermedio

En el modelo de anlisis y sntesis de un compilador, la etapa inicial traduce


un programa fuente a una representacin intermedia a partir de la cual la
etapa final genera el cdigo objeto.

Representaciones grficas
Un rbol sintctico describe la estructura jerrquica natural de un programa fuente.
Un grafo dirigido a cclico (GDA) proporciona la misma informacin pero de una forma
ms compacta porque se identifican las sobrexpresiones comunes.

Cdigo de tres direcciones
El cdigo de tres direcciones es una secuencia de proposiciones de la forma
general.

Implantaciones de proposiciones de tres direcciones
Una proposicin de tres direcciones es una forma abstracta de cdigo
intermedio. En un compilador, estas proposiciones se pueden implantar
como registros con campos para el operador y los operandos. Tres de
dichas representaciones son cudruplos. Triples y triples indirectos.

Un cudruplo es una estructura tipo registro con cuatro campos, que se
llamarn op > argl, argl y resultado.

Triples
Para evitar introducir nombres temporales en la tabla de smbolos, se
har referencia a un valor temporal segn la posicin de la proposicin
que lo calcula.
Triples indirectos
Otra implantacin del cdigo de tres direcciones que se ha considerado es la de
hacer una lista de los apuntadores a triples, en lugar de hacer una lista de los triples
mismos.

DECLARACIONES
Conforme se examina la secuencia de declaraciones dentro de un
procedimiento o un bloque, se puede distribuir la memoria para los
nombres locales al procedimiento. Para cada nombre local se crea una
entrada en la tabla de smbolos con informacin, por ejemplo, referente al
tipo y la direccin relativa de la memoria correspondiente al nombre. La
direccin relativa consta de un desplazamiento desde la base del rea de
datos esttica o el campo para los datos locales en un registro de
activacin.

Declaraciones dentro de un procedimiento
La sintaxis de lenguajes como C j Pascal y FORTRAN permite que todas las
declaraciones en un solo procedimiento se procesen como un grupo. En
este caso, una variable global, por ejemplo desplazamiento, puede
contener la siguiente direccin relativa disponible.

Las reglas semnticas estn definidas respecto a las siguientes operaciones:
1. Crea tabla {previa) crea una nueva tabla de smbolos y devuelve un apuntador a la
nueva tabla. El argumento previo apunta a una tabla de smbolos creada pre-
viamente. se supone que la correspondiente al procedimiento abarcador. El
apuntador previo se coloca en un encabezamiento para la nueva tabla de sm-
bolos, junto con informacin adicional como la profundidad de anidamiento de un
procedimiento. Tambin se pueden numerar los procedimientos en el orden en
que se declaran y guardar dicho nmero en el encabezamiento.
2. introduce {tabla, nombre, tipo, desplazamiento) crea una nueva entrada corres-
pondiente a nombre en la tabla de smbolos apuntada por tabla. De nuevo, in-
troduce coloca el tipo y la direccin relativa desplazamiento en campos
Dentro de la entrada.
3. Aade ancho {tabla, ancho) registra el ancho acumulado de todas las entradas de
tabla en el encabezamiento asociado con esta tabla de smbolos.
4. Introduce proc {tabla, nombre, tabla nueva) crea una entrada nueva para el pro-
cedimiento nombre dentro de la tabla de smbolos apuntada por tabla. El argu-
mento tabla nueva apunta a la tabla de smbolos correspondiente a este proce-
dimiento nombre.

PROPOSICIONES DE ASIGNACIN
En esta seccin las expresiones pueden ser de tipo entero, real, matriz y
registro. Como parte de la traduccin de las asignaciones a cdigo de tres
direcciones j se muestra cmo se pueden buscar los nombres en la tabla
de smbolos y cmo se puede acceder a los elementos de matrices y
registros.
El lexema correspondiente al nombre representado por id viene dado por
el atributo id. Nombre,
Acceso a elementos de matrices
Se puede acceder rpidamente a los elementos de una matriz si se guardan en un
bloque de posiciones consecutivas.

Acceso a campos dentro de registros
El compilador debe registrar tanto los tipos como las direcciones relativas de los
campos de un registro. Una ventaja de conservar esta informacin en las entradas de
la tabla de smbolos correspondientes a los nombres de los campos es que la rutina
para buscar nombres en la tabla de smbolos tambin puede utilizarse para buscar
nombres de campos.
EXPRESIONES BOOLEANAS
En los lenguajes de programacin, las expresiones booleanas tienen dos propsitos
principales. Se utilizan para calcular valores lgicos, pero sobre todo como expresiones
condicionales en proposiciones que alteran el flujo del control, como las proposiciones
if-then. if-then-else o while-do.

Mtodos para traducir expresiones booleanas
Hay dos mtodos principales para representar los valores de una
expresin booleana.
El primer mtodo consiste en codificar numricamente los valores true
(verdadero) y false (falso) y evaluar una expresin booleana igual que una
expresin aritmtica. A menudo se utiliza 1 para indicar true y 0 para
indicar false, aunque son posibles muchas otras codificaciones
El segundo mtodo para implantar expresiones booieanas es mediante flujo
del control, es decir, representando el valor de una expresin booleana
mediante una posicin alcanzada en un programa. Este mtodo es
especialmente adecuado para la implantacin de expresiones booieanas en
proposiciones de flujo de control, como las proposiciones if-then y while-do.
Cdigo en cortocircuito
Tambin se puede traducir una expresin booleana a cdigo de tres direcciones sin generar cdigo
para ninguno de los operadores booleanos y sin que haya que evaluar necesariamente la expresin
completa. Este estilo de evaluacin a veces se denomina cdigo "en cortocircuito" o cdigo
"saltado". Se pueden evaluar las expresiones booleanas sin generar cdigo para los operadores
booleanos and. or y not si se representa el valor de una expresin mediante una posicin en la
secuencia de cdigo.

Expresiones booleanas en modo mixto
Es importante darse cuenta de que se ha simplificado la gramtica para las expresio-
nes booleanas. En la prctica, las expresiones booleanas a menudo contienen subex-
presiones aritmticas como en (a+b) < c.

PROPOSICIONES CASE
La proposicin "switch" o "case" se encuentra disponible en una variedad de lenguajes;
incluso las proposiciones goto calculadas y asignadas de FORTRAN se pueden considerar
como variaciones de la proposicin switch.

switch expresin
begin
case valor: proposicin case
valor: proposicin
case valor: proposicin default:
proposicin end
La traduccin deseada de una proposicin switch es cdigo para:
1. Evaluar la expresin.
2. Encontrar qu valor de la lista de casos es el mismo que el valor de la expresin. Recurdese
que el valor por omisin concuerda con la expresin si no concuerda ninguno de los valores
explcitamente mencionados en los casos.
3. Ejecutar la proposicin asociada con el valor encontrado.


Proposiciones de flujo del control
Ahora se muestra cmo se puede utilizar el relleno de retroceso para traducir proposiciones de
flujo del control en una pasada. Como antes, la atencin se concentra en la generacin de
cudruplos, y la notacin relativa a la traduccin de nombres de campos y los procedimientos
para el manejo de listas de esa seccin sirven asimismo para sta.

LLAMADAS A PROCEDIMIENTOS
El procedimiento
0
es una construccin de programacin tan importante y utilizada tan a menudo
que es fundamental que un compilador genere buen cdigo para llamadas y retornos de
procedimientos. Son parte del paquete de apoyo para la ejecucin, las rutinas en tiempo de
ejecucin que manejan el paso de argumentos a los procedimientos, las llamadas y los retornos.

Generador de cdigo
La fase final del modelo de compilador de este libro es el generador de cdigo. Toma como entrada
una representacin intermedia del programa fuente y produce como salida un programa objeto
equivalente,
Entrada al generador de cdigo
La entrada para el generador de cdigo consta de la representacin intermedia del programa fuente
producida por la etapa inicial, junto con informacin de la tabla de smbolos que se utiliza para
determinar las direcciones durante la ejecucin de los objetos de datos denotados por los nombres
de la representacin intermedia.

Programas objeto
La salida del generador de cdigo es el programa objeto. Al igual que el cdigo intermedio. Esta
salida puede adoptar una variedad de formas: lenguaje de mquina absoluto, lenguaje de mquina
re localizable o lenguaje ensamblador.
Administracin de la memoria
La correspondencia entre los nombres del programa fuente con direcciones de objetos de datos en
la memoria durante la ejecucin la realiza la etapa inicial en cooperacin con el generador de cdigo.



Seleccin de instrucciones
La naturaleza del conjunto de instrucciones de la mquina objeto determina la di-
ficultad de la seleccin de instrucciones. Es importante que el conjunto de instruc-
cin sea uniformexcpmpteo. Si la mquina objeto no apoya cada tipo de datos de
una manera uniforme, entonces cada excepcin a la regla general exige un trata-
miento especial.

Las instrucciones que implican operandos en registros son generalmente ms cortas y rpidas que
las de operandos en memoria. Por tanto, utilizar eficientemente los registros es fundamental para
generar un buen cdigo. El uso de registros se divide a menudo en dos sub problemas:
1. Durante la asignacin de los registros, se selecciona el conjunto de variables que residir en los
registros en un momento del programa.
2. Durante una fase posterior de asignacin a los registros, se escoge el registro especfico en el
que residir una variable.
LA MAQUINA OBJETO
La familiaridad con la mquina objeto y su conjunto de instrucciones es un prerrequisito para
disear un buen generador de cdigo. Desgraciadamente, en un estudio general de la generacin
de cdigo no es posible describir los matices de ninguna mquina objeto tan detalladamente como
para poder generar buen cdigo para un lenguaje completo en dicha mquina.
Asignacin esttica
Considrese el cdigo necesario para aplicar la asignacin esttica. Una proposicin cali en el cdigo
intermedio se implanta mediante una secuencia de dos instrucciones de la mquina objeto. Una
instruccin MOV guarda la direccin de retorno, y una instruccin GOTO transfiere el control al
cdigo objeto del procedimiento.

REPRESENTACIN DE BLOQUES BSICOS POR MEDIO DE GDA
Los grafos a cclicos dirigidos (GDA) son estructuras de datos tiles para implantar
transformaciones en bloques bsicos. Un GDA proporciona una imagen de cmo el valor
calculado por cada proposicin en un bloque bsico se usa en subsiguientes proposiciones del
bloque. Construir un GDA a partir de proposiciones de tres direcciones es una buena manera de
determinar sobrexpresiones comunes (expresiones calculadas ms de una vez) dentro de un
bloque, determinando los nombres que se utilizan dentro del bloque pero que se evalan fuera
de l. y determinando qu proposiciones del bloque podran utilizar su valor calculado fuera del
bloque.

Das könnte Ihnen auch gefallen