Sie sind auf Seite 1von 13

ITNL GENERACION DE CODIGO INTERMEDIO

INTRODUCCION Este documento trata las representaciones intermedias; el cdigo intermedio es un cdigo abstracto independiente de la mquina para la que se generar el cdigo objeto, este cdigo ha de cumplir dos requisitos importantes: Ser fcil de producir a partir del anlisis sintctico. Ser fcil traducir al lenguaje objeto. Hay muchos tipos y formas de cdigos intermedios; como por ejemplo el rbol sintctico, notacin posfija y cdigo de tres direcciones. Algunas ventajas de utilizar la forma intermedia son aumentar la portabilidad del compilador de una maquina a otra: Se puede utilizar el mismo analizador lxico para diferentes generadores. Se pueden utilizar optimizadores independientes de la maquina. Facilitar la divisin en fases del proyecto.

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO 6.1 LENGUAJES INTERMEDIOS Un lenguaje intermedio es el lenguaje de una mquina abstracta diseada para ayudar en el anlisis de los programas de computadora. El trmino viene de su uso en los compiladores, donde un compilador primero traduce el cdigo fuente de un programa, en una forma ms apropiada para las transformaciones de mejora del cdigo (forma usualmente llamada bytecode), como un paso intermedio antes de generar el archivo objeto o el cdigo mquina para una mquina especfica. Caractersticas destacadas: Su principal ventaja es la portabilidad, pues el mismo cdigo puede ser ejecutado en diferentes plataformas y arquitecturas. Esta ventaja la tiene tambin los lenguajes interpretados, aunque generalmente con mejor rendimiento. Por esto, muchos lenguajes interpretados se compilan a bytecode y despus son ejecutados por un intrprete de bytecode. En Java generalmente se transmite el bytecode a la mquina receptora y esta se encarga deutilizar un compilador just-in-time para traducirlo a cdigo mquina antes de su ejecucin. Tipos de lenguaje intermedio Hay tres tipos de lenguaje intermedio los cuales son: Tipo 1 Es una representacin ms abstracta y uniforme que un lenguaje mquina concreto. Su misin es descomponer las expresiones complejas en binarias y las sentencias complejas en sentencias simples. Ventajas: Permite una fase de anlisis independiente de la maquina. (anlisis semntico)

*Bytecode: Cdigo intermedio entre el cdigo fuente y el cdigo mquina. Suele tratrselo como un fichero binario que contiene un programa ejecutable similar a un mdulo objeto.

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO Se pueden realizar optimizaciones sobre el cdigo intermedio (Las complejas rutinas de optimizacin son independientes de la maquina.

Desventajas: Tipo Tipo Perdida de eficiencia (no permite una compilacin de una sola pasada). Introduce en el compilador una nueva fase de traduccin.

2 de lenguajes intermedios: rbol sintctico. rbol sintctico abstracto (todos los nodos del rbol representan smbolos terminales, los nodos hijos son operandos y los nodos internos son operadores). Grafo dirigido acclico (GDA). Notacin posfija.

Tipo 3 Tripelatas Ejemplo: d = a + b * c [1] (*, b, c) [2] (+, a, [1]) [3] (=, d, [2]) <operador>,<operando_1>, <operando_2> Cuartetos Ejemplo: d = a + b * c (*, b, c, temp1) (+, a, temp1, temp2) (=, temp2, , d)

6.2 NOTACIONES Dada una cierta expresin algebraica, existen bsicamente tres formas diferentes de escribirla, notacin prefija, notacin infija y notacin postfija, en funcin de la situacin concreta en la que se pongan los operadores respecto de los operandos. As la expresin algebraica que representa la suma entre un cierto valor A y otro B se podra poner de la siguiente forma:

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO +AB Notacin prefija A+B Notacin infija AB+ Notacin postfija La notacin utilizada habitualmente es la infija. Si observamos un ejemplo adicional de notacin infija en la que se utilicen ms de un operador podemos observar que para realizar correctamente la operacin tenemos que conocer una informacin adicional acerca de los operadores que aparezcan: la prioridad. Dependiendo de la prioridad del operador la operacin se realizara antes o despus dando como consecuencia un resultado distinto si variamos la prioridad de los operadores as en A+B*C, se realizara primero la multiplicacin y a continuacin la suma. Si deseamos variar la prioridad y en consecuencia el orden de evaluacin de las operaciones hay que aadir una informacin adicional que son parntesis. Si en el ejemplo deseamos realizar primero la suma deberemos incluirla entre parntesis (A+B)*C. Esta inclusin de parntesis no es necesaria en notacin prefija o postfija. En nuestro caso nos centraremos en las notaciones infija (la notacin habitual) y la postfija ( mas conveniente para uso interno en el ordenador). 6.2.1 Notacin Infija Es la notacin comn de frmulas aritmticas y lgicas, en la cual se escriben los operadores entre los operandos en que estn actuando (ej. 2 + 2) usando un estilo de infijo. No es tan simple de analizar (parser) por las computadoras, como la notacin de prefijo (ej. + 2 2) o la notacin de postfijo (ej. 2 2 +), aunque muchos lenguajes de programacin la utilizan debido a su familiaridad. En la notacin de infijo, a diferencia de las notaciones de prefijo o posfijo, es necesario rodear entre parntesis a los grupos de operandos y operadores, para indicar el orden en el cual deben ser realizadas las operaciones. En la ausencia de parntesis, ciertas reglas de prioridad determinan el orden de las operaciones.

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO 6.2.2 Notacin Posfija Tambin llamada Notacin Polaca Inversa (en ingles, Reverse polish notation, o RPN), es un mtodo algebraico alternativo de introduccin de datos. Su nombre viene por analoga con la relacionada notacin polaca, una notacin de prefijo introducida en 1920 por el matemtico polaco Jan Lukasiewicz, en donde cada operador est antes de sus operandos. En la notacin polaca inversa es al revs, primero estn los operandos y despus viene el operador que va a realizar los clculos sobre ellos. Tanto la notacin polaca como la notacin polaca inversa no necesitan usar parntesis para indicar el orden de las operaciones mientras la aridad del operador sea fija. En ciencias de la computacin, la notacin de postfijo es frecuentemente usada en lenguajes de programacin concatenativos y basados en pila como PostScript, y es el principio de operacin de ciertas calculadoras, notablemente las de Hewlett-Packard.Tambin es comn en sistemas basados en flujo de datos y tuberas, incluyendo las tuberas de Unix. Su principio es el de evaluar los datos directamente cuando se introducen y manejarlos dentro de una estructura LIFO (Last In First Out), lo que optimiza los procesos a la hora de programar. Bsicamente la diferencias con el mtodo algebraico o notacin de infijo es que, al evaluar los datos directamente al introducirlos, no es necesario ordenar la evaluacin de los mismos, y que para ejecutar un comando, primero se deben introducir todos sus argumentos, as, para hacer una suma 'a+b=c' el RPN lo manejara a b +, dejando el resultado 'c' directamente. 6.2.3 Notacin Prefija Tambin conocida como Notacin Polaca, es una forma de notacin para la lgica, la aritmtica, y el lgebra. Su caracterstica distintiva es que coloca los operadores a la izquierda de sus operandos (+34). Si la aridad de los operadores es fija, el resultado es una sintaxis que carece de parntesis u otros signos de agrupacin, y todava puede ser analizada sin ambigedad. El lgico polaco Jan ukasiewicz invent esta notacin alrededor de 1920 para simplificar la lgica proposicional. La notacin de prefijo ha visto una amplia aplicacin con las Sexpressions de Lisp, donde son requeridos los parntesis debido a los operadores aritmticos que tienen aridad variable. El lenguaje de PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO programacin Ambi usa la notacin polaca para operaciones aritmticas y la construccin del programa. Aunque sea obvio, es importante observar que el nmero de operandos en una expresin debe igualar al nmero de operadores ms uno, de lo contrario la sentencia no tiene ningn sentido (asumiendo que solamente son usados operadores binarios en la expresin). Esto puede ser fcil de pasarlo por alto cuando se trata con expresiones ms largas y ms complicadas con varios operadores, as que se debe tener cuidado de comprobar con minuciosidad que una expresin tiene sentido al usar la notacin de prefijo. 6.3 Representacin de Cdigo Intermedio Existen maneras formales para representar cdigo intermedio; tales como: Polaca Cdigo P Triplos Cudruplas

Estas notaciones simplifican la traduccin de nuestro cdigo fuente a nuestro cdigo objeto ya que se ahorran y acotan smbolos de la tabla de smbolos. 6.3.1 Polaca Se utiliza principalmente aritmticas. Simple No utiliza registros Expresin a notacin polaca inversa - Algoritmo o Representar la expresin en forma de rbol sintctico. o Recorrer el rbol en postorden. para la representacin de expresiones

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO - Ejemplo: a+b*c-d

Cdigo: a b c * + d 6.3.2 Cdigo P El cdigo P comenz como un cdigo ensamblador objetivo estndar producido por varios compiladores Pascal en la dcada de 1970 y principios de la de 1980. Fue diseado para cdigo real para una maquina de pila hipottica la idea era hacer que los compiladores de Pascal se transportaran fcilmente requiriendo solo que se volviera a escribir el interprete de la maquina P para una plataforma, el cdigo P tambin a probado ser til como cdigo intermedio y sean utilizado varias extensiones y modificaciones del mismo en diverso compiladores de cdigo nativo, la mayor parte para lenguaje tipo Pascal. Como el cdigo P fue diseado para ser directamente ejecutable, contiene una descripcin implcita de un ambiente de ejecucin particular que incluye tamaos de datos, adems de mucha informacin especfica para la maquina P, que debe conocer si se desea que un programa de cdigo P se comprensible. La maquina P esta compuesta por una memoria de cdigo, una memoria de datos no especfica para variables nombre das y una pila para datos temporales, junto como cualquiera registro que sea necesario para mantener la pila y apoyar la ejecucin.

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO 6.3.3 Triplos Las proposiciones de tres direcciones se parecen mucho al ensamblador, el cual es un lenguaje intermedio ms entendible para la mquina. Con una estructura de tres campos se pueden omitir los valores temporales, dicha estructura recibe el nombre de triples y tiene los siguientes campos: op, arg1 y arg2. Generalmente el cdigo que generan los triples recibe el nombre de cdigo de dos direcciones, aunque en ocasiones puede variar. Cuando se utilizan triples se ocupan punteros a la misma estructura. Las expresiones lgicas tambin pueden pasarse a cdigo de tres direcciones, utilizando para ello expresiones en corto circuito. La notacin de tres direcciones es una forma abstracta de cdigo intermedio. Esta notacin se puede implementar como registros con campos para el operador y operadores. 6.3.4 Cudruplas Una cudrupla es una estructura de tipo registro con cuatro campos: op, result, arg1 y arg2. Por ejemplo, la proposicin de tres direcciones x = y + z representara como: (suma, x, y, z). se

En general, las instrucciones que no requieren todos los campos dejan vacos los que no utilizan: Ej: Las proposiciones con operadores unarios no utilizan arg. Las cudruplas facilitan la aplicacin de muchas optimizaciones, pero hay que tener un algoritmo para la reutilizacin de las variables temporales (reutilizacin de registros del procesador). 6.4 Esquemas de Generacin Los esquemas de generacin son las estrategias o acciones que se debern realizarse y tomarse en cuenta en el momento de generar cdigo intermedio. Los esquemas de generacin dependen de cada lenguaje.

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO 6.4.1 Expresiones Para generar expresiones estas deben representarse de manera ms simple y ms literal para que su conversin sea ms rpida. Por ejemplo la traduccin de operaciones aritmticas debe especificarse una por una, de tal forma que una expresin sea lo ms mnimo posible. 6.4.2 Declaraciones de Variables Constantes Las declaraciones de variables y constantes deben separarse de tal manera que queden las expresiones una por una de manera simple. Por ejemplo int respectivamente. a,b,c; se descompone a int a; int b; intc;

6.4.3 Estatuto de Asignacin Las operaciones de asignacin deben quedar expresadas por una expresin sencilla, si est es compleja se debe reducir hasta quedar un operador sencillo. Por ejemplo: x = a+b/5; debe quedar de la forma y = b/5; z = a+y; x=z. 6.4.4 Estatuto Condicional Las condiciones deben expresarse de manera lo ms sencilla posible de tal forma que puedan evaluarse en cortocircuito. Por ejemplo una instruccin como: if (a == b && f!=5 && f%3==0) se evala primero x = (a==b && f!=5) y = x && f%3==0; if (y). Las instrucciones de decisin compleja como switch se reducen a una versin complejas de ifs. 6.4.5 Estatuto Ciclos Los ciclos se descomponen en un ciclo genrico, por lo que ciclos while, for y dowhile tienen la misma representacin interna. En el caso de C, todo queda en forma de while. Las condiciones lgicas tambin pueden ser evaluadas en cortocircuito y reducidas.

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO 6.4.6 Arreglos Los arreglos se descomponen en estructuras bsicas de manejo de manera simple, as por ejemplo: char *a=Hola; se reduce a: a[0]=H; a[1]=o; a[2]=l; a[3]=a; a[4]=\0;. 6.4.7 Funciones Las funciones pueden reducir a en lnea, lo que se hace es expander el cdigo original de la funcin. Las funciones se descomponen simplificando los parmetros de manera individual al igual que el valor de retorno.

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO

Conclusin Despus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. Se puede considerar esta representacin intermedia como un programa para una mquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto. La representacin intermedia puede tener diversas formas, como son La Polaca, el cdigo P, Triplos y Cudruplas. Los esquemas de generacin son las estrategias o acciones que se debern realizarse y tomarse en cuenta en el momento de generar cdigo intermedio y es diferente en cada lenguaje.

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO

BIBLOGRAFIA http://www.mitecnologico.com/Main/GeneracionOptimizacionCodigoInte rmedio http://www.slideshare.net/blankardz/cdigo-intermedio5717987/download http://www.unse-prog2.comxa.com/downloads/Sesion-8.pdf http://es.scribd.com/doc/44986075/Lenguajes-Intermedios http://upsg01.foroactivo.com/t175-notaciones http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_infijo http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_postfijo http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_prefijo http://pepperslina.over-blog.net/article-31437284.html http://antares.itmorelia.edu.mx/~jcolivar/courses/ps207a/ps2_u6.pdf http://www.cc.uah.es/ie/docencia/ProcesadoresDeLenguaje/Procesadore sDeLenguajeTema7_3xpagina.pdf

PROGRAMACION DE SISTEMAS 13

ITNL GENERACION DE CODIGO INTERMEDIO INDICE INTRODUCCION____________________________________________1 6.1 LENGUJES INTERMEDIOS _________________________________2 6.2 NOTACIONES___________________________________________3 6.2.1 NOTACION INFIJA ___________________________________4 6.2.2 NOTACION POSFIJA__________________________________5 6.2.3 NOTACION PREFIJA__________________________________5 6.3 REPRESENTACION DE CODIGO INTERMEDIO__________________6 6.3.1 POLACA ___________________________________________6 6.3.2 CODIGO P _________________________________________7 6.3.3 TRIPLOS___________________________________________8 6.3.4 CUADRUPLAS_______________________________________8 6.4 ESQUEMAS DE GENERACION ______________________________8 6.4.1 EXPRESIONES ______________________________________9 6.4.2 DECLARACIONES DE VARIABLES CONSTANTES____________9 6.4.3 ESTATUTO DE ASIGNACION ___________________________9 6.4.4 ESTATUTO CONDICIONAL_____________________________9 6.4.5 ESTATUTO CICLOS __________________________________9 6.4.6 ARREGLOS________________________________________10 6.4.7 FUNCIONES_______________________________________10 CONCLUCION_____________________________________________11 BIBLOGRAFIA ____________________________________________12

PROGRAMACION DE SISTEMAS 13

Das könnte Ihnen auch gefallen