Generación de Código Intermedio Resumen Traductores 2

download Generación de Código Intermedio Resumen Traductores 2

of 6

Transcript of Generación de Código Intermedio Resumen Traductores 2

  • 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 procedimiento0 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.