Вы находитесь на странице: 1из 11

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 P
Un 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.
->Triplos
En 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 menor espacio 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
->Cudruplos
Es una estructura tipo registro con cuatros campos que se llaman:
Operador Operando1 Operando2 Resultado
Donde operando1, operando2 y resultado pueden ser constantes, identificadores y
variables temporales definidos por el compilador mientras que operador representa
una operacin arbitraria.
Operador Operando1 Operando2 Resultado
* C D T1
+ B T1 T2
EJEMPLO:
A := B + C * D
Esquemas 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:
{
int a,b;
= T2

A
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:
int alumnos, contador;
float A,B,C;
char Letra;
Declaracion de Constantes.
Para declarar constantes en el lenguaje C, slo basta anteponer el
calificador const seguido del tipo de dato que manejar esa constante
(int,char,etc), y por ltimo el valor que tomar esa variable.
Ejemplo:
const int k = 12
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.
Ejemplo:
x = a+b/5; debe quedar de la
forma y = b/5; z = a+y; x=z
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
Son 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 a una 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:
If Expresin lgica Then
Instrucciones Afirmativo
Else
Instrucciones negativo
End If
Hay otra forma, abreviada, de escribir una sentencia if, 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 : valor2
Esta expresin emplea el operador ? para asignar valores a una variable. Si la
condicin resulta verdadera entonces asigna valor1, de lo contrario
asignar valor2.
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 while
Ejemplo:
While (A>B) and (A<=2*B-5) do A:= A+B
el Cdigo intermedio generado ser:
L1: if A>B goto L2
goto L3
L2: T1:= 2*B
T2:= T1-5
if A
goto L3
L4: A:= A+B
goto L1
L3: . . .
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 nmero
double 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 disciplina
Para 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 infijo
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.
->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 primer
operador seguido inmediatamente de un par de operandos.
->Notacion Polaca Inversa
Notacin Polaca Inversa, Notacin de Posfijo o Notacin Posfija
Mtodo 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 funcionamiento
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.
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
* / + - ^
Operandos
a b c...
1 2 3 4...
Cada operador se escribe detrs (a la derecha) de sus operandos.
Ventajas De La Notacion Posfija
1) 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 CONSULTA
http://raknarrok.blogspot.mx/2011/05/r-epresentacion-de-codigo-intermedio.html

Вам также может понравиться