8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
1/49
integrantes :
Juan Jose Justo
Yasmin CristalArturo
Esequiel
Yesenia Gabriel
Linarez
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
2/49
La generacin de cdigo data desde laexistencia de los primeros compiladores.Hasta la aparicin de los primerosgeneradores de cdigo comerciales u
orientados a "usuarios finales"; la generacinde cdigo era exclusividad de programascompiladores especializados.
En tiempos ms recientes la generacin de
cdigo, gracias al avance de la ingeniera delsoftware, se ha llevado a un nivel diferente;donde se encuentran programas generadoresde pantallas, reportes y consultas, estas sonherramientas de gran utilidad
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
3/49
para crear un generador de cdigo se
deben hacer muchas de las tareas querealizan los compiladores; algunas de estastareas son: la bsqueda de patrones, laescritura de cdigo, el anlisis sintctico, el
anlisis lxico y la optimizacin de cdigo.Estas tareas las realiza el desarrollador unavez para una arquitectura especifica.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
4/49
Se debe considerar tanto la memoria esttica
como dinmica, y en esta se utilizangeneralmente pilas. Los lenguajesintermedios generalmente
tienen rboles de derivacin ms pequeos
que su contraparte original.
Se puede representar un rbol sintctico con
un Grafo Dirigdo Acclico (GDA).
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
5/49
La notacin postfija es una manera
linealizada de representar un rbol sintctico.
EJEMPLO :
a := b*-c+b*-c
abc -*bc -*+= x := y op z
x+y*z
t1:=y*z
t2:=x+t1
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
6/49
Dado que el lenguaje puede presentardistintas funciones anidadas, los tercetos losgeneramos por orden del parser y sonalmacenados en un sitio u otro dependiendodel contexto en que nos encontremos.
Es decir, se almacenan en una lista detercetos dependiente de la Tabla deSmbolos. Hay tantas listas de tercetos comofunciones haya en el cdigo fuente ms una
lista de tercetos asociada a la Tabla deSmbolos Global .
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
7/49
En computacin, un lenguaje intermedio esel lenguaje de una mquina abstractadiseada para ayudar en el anlisis de losprogramas de computadora.
El trmino viene de su uso en loscompiladores, donde un compilador primerotraduce el cdigo fuente de un programa, enuna forma ms apropiada para lastransformaciones de mejora del cdigo
(forma usualmente llamada bytecode), comoun paso intermedio antes de generar elarchivo objeto o el cdigo mquina para unamquina especfica.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
8/49
Una variante del significado de "lenguajeintermedio" se da en esos lenguajes de altonivel que no soportan o no generan un
archivo objeto o cdigo mquina, pero sgeneran un lenguaje intermedio. Luego eselenguaje intermedio se transfiere a uncompilador que termina de realizar el
archivo objeto o el cdigo mquina. Esto seemplea generalmente por cuestiones deoptimizacin y portabilidad.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
9/49
Los lenguajes intermedios nos sirven pararepresentar la produccin final de nuestrolenguaje fuente.
Existen muchos lenguajes intermedios, lamayora de ellos son una representacinms simplificada del cdigo original parafacilitar la traduccin hacia el cdigo final.
Otros lenguajes intermedios sirven de base ocomo representacin parcial de otrosprocesos.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
10/49
Otros lenguajes intermedios sirven de base o
como representacin parcial de otros procesos.
Por ejemplo al compilar un programa en C en
Windows o DOS, se produce un cdigo objeto
con extensin .obj para que posteriormenteel enlazador cree finalmente el cdigoejecutable .exe.
En sistemas basados en Unix, tambin ocurre
algo similar generndose un archivo .o y elejecutable a.out.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
11/49
Otros lenguajes intermedios famosos son los
generados para la mquina virtual de Java el
bytecode; y para la mquina virtual de .NETel MISL para luego ejecutarse en tiempo de
ejecucin JIT (Just in Time) Hay Otros lenguajesintermedios que se utilizan en
sistemas distribuidos como RPC, CORBA y
su IDL, etc.
En este caso estos lenguajes intermedios se
encargan de enmascarar toda laheterogeneidad de las comunicaciones
distribuidas en una computadora
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
12/49
Es una representacin ms abstracta yuniforme que un lenguaje mquina concreto.Su misin es descomponer las expresionescomplejas en binarias y las sentenciascomplejas en sentencias simples.
VENTAJAS: Permite una fase de anlisis(anlisis semntico) independiente de la
mquina. Se pueden realizar deoptimizaciones sobre el cdigo intermedio(Las complejas rutinas de optimizacin sonindependientes la mquina).
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
13/49
DESVENTAJAS: Prdida de eficiencia (nopermite una compilacin de una sola
pasada). Introduce en el compilador unanueva fase de traduccin.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
14/49
rbol sintctico abstracto.Todos los nodos del rbol representan smbolos
terminales. Los nodos hijos son operandos y losnodos internos son operadores.
Grafo dirigido acrlico (GDA).
Notacin posfija.
Definicin de una mquina abstracta.
N-tupla : Cada sentencia del lenguaje intermedio
consta de N elementos: (Operador, Operando1,Operando2, , Operando N1)
Los ms usuales son los tercetos (tripletas) y loscuartetos (cudruplas), llamados tambin cdigode tres direcciones.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
15/49
Tripletas: Ejemplo: d = a + b * c [1] (*, b, c)[2] (+, a, [1]) [3] (=, d, [2]) ,, Cuartetos:
Ejemplo: d = a + b * c (*, b, c, temp1) (+, a,temp1, temp2) (=, temp2, , d)
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
16/49
Las notaciones son una forma especial en laque se pueden expresar una expresinmatemtica y puedan ser de 3 formas: infija,prefija y posfija.
Los prefijos, Pre - Pos - In se refieren a laposicin relativa del operador con respecto alos dos operandos.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
17/49
La diversidad de notaciones corresponde en
que para algunos casos es ms sencillo un
tipo de notacin.
Las notaciones tambin dependen de cmo
se recorrer el rbol sintctico, el cual puede
ser en inorden, preorden o postorden;
teniendo una relacin de uno a uno con lanotacin de los operadores.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
18/49
La notacin infija es la ms utilizada por los
humanos por que es la ms comprensible ya
que ponen el operador entre los dosoperandos. Por ejemplo a+b-5.
No existe una estructura simple para
representar este tipo de notacin en la
computadora por esta razn se utilizan otrasnotaciones.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
19/49
Es la forma mas comn que utilizamos paraescribir expresiones matemticas, estasnotaciones se refiere a que el operador estaentre los operadnos.
La notacin infija puede estar completamentepatentizada o puede basarse en un esquema deprecedencia de operadores as como el uso de
parntesis para invalidar los arreglos al expresarel orden de evaluacin de una expresin:
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
20/49
3*4=12
3*4+2=14
3*(4+2)=18
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
21/49
Como su nombre lo indica se refiere a que eloperador ocupa la posicin despus de losoperandos sus caractersticas principales son:el orden de los operandos se conserva igualque la expresin infija equivalente no utiliza
parntesis ya que no es una operacinambigua.La operacin posfija no es exactamente loinverso a la operacin prefija equivalente:
(A+B)*C AB+C*
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
22/49
La notacin postfija pone el operador al final
de los dos operandos, por lo que la expresin
queda: ab+5-.
La notacin posfija utiliza una estructura deltipo LIFO (Last In First Out) pila, la cual es lams utilizada para la implementacin.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
23/49
Nos indica que el operador va antes de losoperandos sus caractersticas principales son:
-Los operandos conservan el mismo orden
que la notacin infija equivalente.
-No requiere de parntesis para indicar elorden de precedencia de operadores ya queel es una operacin.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
24/49
Se evala de izquierda a derecha hasta queencontrmosle primer operador seguidoinmediatamente de un par de operandos.
Se evala la expresin binaria y el resultadose cambia como un nuevo operando. Serepite este hasta que nos quede un soloresultado.
* +A B C (A+B)*C
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
25/49
La notacin prefija pone el operador primero
que los dos operandos, por lo que la expresinanterior queda: +ab-5. Esto se representacon una estructura del tipo FIFO (First InFirst Out) o cola.
Las estructuras FIFO son ampliamenteutilizadas pero tienen problemas con elanidamiento aritmtico.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
26/49
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
27/49
Si deseamos representar las expresiones(2+(3*4)) = x y ((2+3)*4)= x en las tresnotaciones mencionadas, el resultado sera:
(2+(3*4)) = x ((2+3)*4) = x
Notacin
prefija
= + 2 * 3 4 x = * + 2 3 4 x
Notacin infija 2+3*4 = x (2+3)*4 = x
Notacin
postfija
2 3 4 * + x = 2 3 + 4 * x =
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
28/49
Existen maneras formales para representarcdigo intermedio.
Estas notaciones simplifican la traduccin de
nuestro cdigo fuente a nuestro cdigoobjeto ya que ahorran y acotan smbolos de
la tabla de smbolos
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
29/49
Tambin conocida como notacin de prefijoo notacin prefija, es una forma de notacinpara la lgica, la aritmtica, y el lgebra. Su
caracterstica distintiva es que coloca losoperadores a la izquierda de sus operandos.Si la aridad de los operadores es fija, elresultado es una sintaxis que carece deparntesis u otros signos de agrupacin, ytodava puede ser analizada sin ambigedad.El lgico polaco Jan ukasiewicz invent estanotacin alrededor de 1920 para simplificarla lgica proposicional.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
30/49
Pascal Notacin Polaca
a+b-c ab+c-
a+b*c abc*+
a+b*c+d abc*+d+
(a+b)*c ab+c*
a+(b-c) abc-+
a*b+c ab*c+
a+b/c abc/+
(a+b)/c ab+c/
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
31/49
El cdigo P hace referencia a mquinas queutilizan o se auxilian de pilas para generar
cdigo objeto.
En muchos caso la P se asociado a cdigo
portable el cual garantiza que el cdigo
compilado en una mquina se pueda
ejecutar en otras.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
32/49
Para garantizar la portabilidad del cdigo se
necesita que el lenguaje este estandarizado
por algn instituto y que dicho cdigo no
tenga extensiones particulares.
Tambin se recomienda la no utilizacin de
caractersticas especiales exclusivas de
alguna arquitectura de computadoras enparticular.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
33/49
Las proposiciones de tres direcciones se
parece mucho al ensamblador, el cual es un
lenguaje intermedio ms entendible para la
mquina.
Las estructuras de control (if, switch, while,
do-while, for) son realmente etiquetas goto
disfrazadas.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
34/49
El problema de utilizar cudruplos radica en
que se tienen que colocar los valores
temporales en la tabla de smbolo.
Con una estructura de tres campos se
pueden omitir los valores temporales, dicha
estructura recibe el nombre de triples y tienelos siguientes campos: op, arg1 y arg2
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
35/49
Generalmente el cdigo que generan lostriples recibe el
nombre de cdigo de dos direcciones, aunque
en ocasionespuede variar.
Cuando se utilizan triples se ocupan punterosa la misma
estructura de los triples.
* b t1 t2 //cudruplos
* b (0) //triple
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
36/49
Se debe tener en cuenta el proceso de
asignacin, de declaracin, expresiones
booleanas.
Las expresiones lgicas tambin pueden
pasarse a cdigo de tres direcciones,
utilizando para ello expresiones en corto
circuito.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
37/49
La evaluacin de expresiones en corto
circuito implica que se evalan condiciones
revisando valores anteriores; por ejemplo,
para el operador AND con una condicin que
se detecte como falsa toda la expresin es
falsa, en el caso del operador OR si se
encuentra una condicin verdadera todo serverdadera
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
38/49
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.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
39/49
Los interpretes generalmente utilizan este
triplos para generar el cdigo intermedio para
ejecutarse una vez considerado la
instruccin como vlido.
En este sentido, un compilador es ms difcil
de implementar ya que tendr que mantener
todas las estructuras generadas que enmuchas ocasiones sern cudruplos.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
40/49
Es una estructura tipo registro con cuatros
campos que se llaman: op, arg1, arg2 y
resultado. OP tiene un cdigo intermedio.
Los operadores unarios como x:=-y no
utilizan arg2. Generalmente arg1, arg2 y
resultado son valores de tipo puntero y
apuntan a una entrada en la tabla desmbolos.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
41/49
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. Tomaremos algunos
esquemas de generacin del lenguaje C.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
42/49
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.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
43/49
Las declaraciones de variables y constantes
deben separarse de tal manera que queden
las expresiones una por una de manerasimple.
Por ejemplo int a , b, c; se descompone ainta;
int b; intc; respectivamente.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
44/49
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.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
45/49
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
46/49
Los ciclos se descomponen en un ciclo
genico, por lo que ciclos while, for y dowhile
tienen la misma representacin interna.
En el caso de C, todo queda en forma dewhile.
Las condiciones lgicas tambin pueden ser
evaluadas en cortocircuito y reducidas.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
47/49
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;
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
48/49
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.
8/3/2019 Unidad Seis Tere Programacion de Sistemas (3)
49/49