Unidad Seis Tere Programacion de Sistemas (3)

Embed Size (px)

Citation preview

  • 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