Representación de Código Intermedio

download Representación de Código Intermedio

of 11

Transcript of Representación de Código Intermedio

Representacin de cdigo intermedio.Existen maneras formales para representar cdigo intermedio.Cdigo P.Triplos.Cudruplos.Estas notaciones simplifican la traduccin de nuestro cdigo fuente a nuestro cdigo objeto ya que ahorran y acotan smbolos de la tabla de smbolos-> Cdigo PUn tipo de lenguaje interpretado. idiomas P-cdigo son una especie de hbrido, que caen entre lenguajes compilados y lenguajes interpretados de la manera que se ejecuten. Al igual que un lenguaje interpretado, la programacin del P-cdigo se convierte en una forma binaria de forma automtica cuando se ejecuta, en lugar de tener que ser compilado. Sin embargo, a diferencia de un lenguaje compilado el archivo binario ejecutable se almacena en pseudo-cdigo, no en lenguaje de mquina. Adems, a diferencia de un lenguaje interpretado, el programa no tiene que ser convertida a binario cada vez que se ejecute. Despus de que se convierte en P-cdigo la primera vez, la versin pseudo-cdigo se utiliza para cada ejecucin adicionales.Cdigo P (y por tanto sus programas) tienden a ser ms lento que los lenguajes compilados y programas, pero ms rpido que lenguajes interpretados, y por lo general tienen autorizacin para algunas funciones del sistema operativo de bajo nivel, pero no el acceso directo al hardware. No requieren compiladores a veces costosos, a menudo se incluyen junto con los sistemas operativos, y algunos lenguajes de cdigo p-son ms fciles de programar que lenguajes compilados. Ejemplos de lenguas Pcode son Java, Python y REXX / REXX objetos.->TriplosEn la historia de los compiladores han sido utilizadas una amplia variedad de representaciones intermedias como lo es la siguiente clase de representacin de cdigo intermedio de un rbol de 3 direcciones,2 para los operandos y una para la ubicacin del resultado. esta clase incluye un amplio numero de representaciones diferentes entre las cuales encontramos cuadruplos y triples. la principal diferencia entre estas notaciones y la notacin postfija es que ellos incluyen referencias explicitas para los resultados de los clculos intermedios, mientras que la notacin posfija los resultados son implcitos al representarlos en una pila. La diferencia entre triples y cuadruplos es que con los triples es referenciado el valor intermedio hacia el numero del triple que lo creo, pero en los cudruplos requiere que ellos tengan nombre implcitos. Los triples tienen una ventaja obvia de ser mas consistente, pero ellos dependen de su posicin, y hacen que la optimizacin presente cambios de cdigo mucho mas compleja.Para evitar tener que introducir nombres temporales en la tabla de smbolos, se hace referencia a un valor temporal segn la posicin de la proposicin que lo calcula. Las propias instrucciones representan el valor del nombre temporal. La implementacin se hace mediante registros de solo tres campos (op, arg1, arg2). En la notacin de tripletes se necesita menorespacio y el compilador no necesita generar los nombres temporales. Sin embargo, en esta notacin, trasladar una proposicin que defina un valor temporal exige que se modifiquen todas las referencias a esa proposicin. Lo cual supone un inconveniente a la hora de optimizar el cdigo, pues a menudo es necesario cambiar proposiciones de lugar. Una forma de solucionar esto consiste en listar las posiciones a las tripletas en lugar de listar las tripletas mismas. De esta manera, un optimizador podra mover una instruccin reordenando la lista, sin tener que mover las tripletas en si->CudruplosEs una estructura tipo registro con cuatros campos que se llaman:OperadorOperando1Operando2Resultado

Donde operando1, operando2 y resultadopueden ser constantes, identificadores y variables temporales definidos por el compilador mientras que operador representa una operacin arbitraria.OperadorOperando1Operando2Resultado

*CDT1

+BT1T2

=T2A

EJEMPLO:A := B + C * DEsquemas de generacin.Que son?Los esquemas de generacin son las estrategias o acciones que debern realizarse y tomarse en cuenta en el momento de generar cdigo intermedio.Declaracin de variables y 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 a,b,c;se descompone a int a;int b; intc; respectivamente.Las variables utilizadas en los programas se clasifican en dos tipos:variables locales y variables globales.Variables locales:Aquella que est declarada para el programa o algoritmo completo.Para definir variables locales, la definicin debe hacerse inmediatamente despus de una llave de inicio ({), y la variable deja de existir fuera de la llave de fin(}) que corresponde a la llave de inicio despus del cul fue definida la variable.Ejemplo:{inta,b;a=5;b=a + 100;}Variables globales:Aquella que est declarada y definida dentro de una funcin y slo es vlida dentro de la misma funcin y no podr utilizarse en otra parte del programa.Una variable global se declara fuera de cualquier funcin y primero que cualquier funcin que requiera de ella. Una variable se declara de la siguiente forma:tipo identificador1, identificador2..ident n;Ejemplos:Algunos ejemplos de cmo definir variables son los siguientes:intalumnos, contador;floatA,B,C;charLetra;Declaracion de Constantes.Para declarar constantes en el lenguaje C, slo basta anteponer el calificadorconstseguido del tipo de dato que manejar esa constante (int,char,etc), y por ltimo el valor que tomar esa variable.Ejemplo:constintk = 12Estatuto 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.Ejemplo:x = a+b/5; debe quedar de laforma y = b/5; z = a+y; x=zEstatuto 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 ifsSon por as decirlo las normas que regulan nuestras expresiones regulares, (if,then, else) donde una expresin condicional nos permite elegir que pautas deben ser encontradas, en base auna condicin.Nuestros programas pueden tomar decisiones sirvindose de las expresiones condicionales.Una expresin condicional responde a los valores de True o False y de acuerdo al resultado podemos decidir si ejecutar o no un pedazo de cdigo o simplemente no hacer nada.if (expresion condicional) {bloque de cdigo}if (expresion condicional) {bloque de cdigo ;}else {bloque de cdigo ;}Estatus condicional.Ejecutara instrucciones dependiendo del valor de una condicin que resulta en un dato tipo boolean.Ejemplo:IfExpresin lgicaThenInstrucciones AfirmativoElseInstrucciones negativoEnd IfHay otra forma, abreviada, de escribir una sentenciaif, aunque es importante observar que esta expresin no slo compara valores, sino que tambin asigna un valor a una variable. su sintaxis es:Variable=(condicin) ?valor1:valor2Esta expresin emplea el operador?para asignar valores a una variable. Si la condicin resulta verdadera entonces asignavalor1, de lo contrario asignarvalor2.var sCondicin = (user = "Juan") ? "Jefe" : "Empleado" ;Estatuto de Ciclos.Los ciclos se descomponen en un ciclo genrico, por lo que ciclos while, for y do-while tienen la misma representacin interna.Todo queda en forma de whileEjemplo:While (A>B) and (AB goto L2goto L3L2: T1:= 2*BT2:= T1-5if Agoto L3L4: A:= A+Bgoto L1L3:. . .Arreglos.Los Arreglos se descomponen en estructuras bsicas de manejo de manera simple:Ejemplo:char a= Hola;Se reduce a:a[0]=H; a[1]=o; a[2]=l; a[3]=a;Funciones.Las funciones pueden reducir a en lnea. Lo que se hace es expandir el cdigo original de la funcin.Las funciones se descomponen simplificando los parmetros de manera individual al igual que el valor de retorno.Ejemplo:cuadrado();//Declaramos la funcin// regresar el cuadrado de un nmerodouble cuadrado(double n){return n*n;}Generacin de cdigo intermedio: Lenguajes intermedios.Optimizacin de Cdigo.Mejorar el cdigo intermedio, de modo que resulte un cdigo de mquina ms rpido de ejecutar.->Administrador de la tabla de smbolos:El administrador de la tabla de smbolos se encarga de manejar los accesos a la tabla de smbolos, en cada una de las etapas de compilacin de un programa.->Manejador de errores:En cada fase del proceso de compilacin es posibles encontrar errores.Es conveniente que el tratamiento de los errores se haga de manera centralizada a travs de un manejador de errores.De esta forma podrn controlarse ms eficientemente los errores encontrados en cada una de las fases de la compilacin de un programa.[]Notaciones.Sistema convencional de signos de una determinada disciplinaPara nosotros es una forma especial en la que se pueden expresar una expresin matemtica en tres formas: Infija, Prefija y Posfija.->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 infijoEn 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.->Notacion Polaca.Tambin conocida como notacin de prefijo o notacin prefija, 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. 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.La notacin de prefijo ha visto una amplia aplicacin con las S-expressions, donde son requeridos los parntesis debido a los operadores aritmticos que tienen aridad variable. El lenguaje de programacin Ambi usa la notacin polaca para operaciones aritmticas y la construccin del programa. La posfija notacin polaca inversa es usada en muchos lenguajes de programacin basados en pila como PostScript, y es el principio de operacin de ciertas calculadoras, notablemente las de Hewlett-Packard.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.Prefija:Se evala de izquierda a derecha hasta que encontrmosle primeroperador seguido inmediatamente de un par de operandos.->Notacion Polaca InversaNotacin Polaca Inversa, Notacin de Posfijo o Notacin PosfijaMtodo algebraico alternativo de introduccin de datos."Introducida en 1920 por el matemtico polaco Jan Lukasiewicz, en donde cada operador est antes de sus operandos.El esquema polaco inverso fue propuesto en 1954 por Burks, Warren, y Wright y reinventado independientemente por Friedrich L. Bauer y Edsger Dijkstra a principios de los aos 1960.Es frecuentemente usada en lenguajes deprogramacin concatenativos y basados en pila. Tambin es comn en sistemas basados en flujo de datos y tuberas, incluyendo las tuberas de Unix.Su funcionamientoSu 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.El orden de los operandos es importante cuando se manejan operadores no conmutativos (como la resta o la divisin), as, si dividimos 10 entre 2, por ejemplo, en las tres notaciones se debe escribir de la siguiente manera: "10 / 2", "/ 10 2", "10 2 /".Operadores* / + - ^Operandosa b c...1 2 3 4...Cada operador se escribe detrs (a la derecha) de sus operandos.Ventajas De La Notacion Posfija1)En notacin postfija nunca son necesarios los parntesis.2)En notacin postfija no es necesario definir prioridades entre operadores.3)Una expresin postfija puede evaluarse de forma muy sencilla.

FUENTES DE CONSULTAhttp://raknarrok.blogspot.mx/2011/05/r-epresentacion-de-codigo-intermedio.html