49289218 antologia de pro todo

Upload: yonic

Post on 05-Apr-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/31/2019 49289218 Antologia de Pro Todo

    1/44

    ANTOLOGIAPROGRAMACION

    DE SISTEMASUNIDADES 5,6,7,8

    ALUMNOS: AMAN JOACHIN PALAFOX

    MELCHOR NOVELO HERNANDEZ

    LUIS JILBERTO ACOSTA MENDEZ

    MIGUEL MORENO CHAMIZ

    2010

    INSTITUTO TECNOLOGICO SUPERIOR DE CHAMPOTON

    14/12/2010

  • 7/31/2019 49289218 Antologia de Pro Todo

    2/44

    PROGRAMACION DE SISTEMAS

    2

    INDICE

    Unidad 5: Anlisis semntico.................................................................................................... 4

    Semntica de instrucciones condicionales..................................................................... 5

    Semntica de etiquetas y GOTO ..................................................................................... 6

    5.1 ANALIZADOR SEMNTICO.......................................................................................... 7

    5.2 VERIFICACIN DE TIPOS EN EXPRESIONES........................................................ 8

    5.3 CONVERSIN DE TIPOS............................................................................................ 11

    5.4 Acciones agregadas en un analizador sintctico descendente (top-down).......... 14

    5.5 Pila semntica en un analizador sintctico ascendente (bottom-up). ................... 15

    5.6 Administracin de la tabla de smbolos ...................................................................... 16

    5.7 Manejo de errores semnticos. ................................................................................... 20

    6. GENERACION DE CODIGO INTERMEDIO ................................................................... 24

    6.1Generador de cdigo intermedio .................................................................................. 24

    6.2 Notaciones ...................................................................................................................... 25

    6.2.1Infija ........................................................................................................................... 25

    6.2.2 Postfija...................................................................................................................... 25

    6.2.3 Prefija ....................................................................................................................... 25

    6.3 Representacin de cdigointermedio ......................................................................... 26

    6.3.1 Notacin Polaca...................................................................................................... 26

    6.3.2 Cdigo P .................................................................................................................. 26

    6.3.3 Triplos....................................................................................................................... 26

    6.3.4 Cudruplos .............................................................................................................. 27

    6.4 Esquemas de generacin............................................................................................. 276.4.1 Expresiones............................................................................................................. 27

    6.4.2 Declaracin de variables,constantes................................................................... 27

    6.4.3 Estatuto de asignacin .......................................................................................... 27

    6.4.4 Estatuto condicional ............................................................................................... 28

    6.4.5 Estatuto de ciclos.................................................................................................... 28

    6.4.6 Arreglos .................................................................................................................... 28

    6.4.7 Funciones ................................................................................................................ 28

    7. Optimizacin ......................................................................................................................... 29

  • 7/31/2019 49289218 Antologia de Pro Todo

    3/44

    PROGRAMACION DE SISTEMAS

    3

    7.1. Tipos de Optimizacin.................................................................................................. 29

    7.1.1. Locales .................................................................................................................... 29

    7.1.2. Globales .................................................................................................................. 30

    7.1.3 Bucles....................................................................................................................... 31

    7.1.4 De mirilla .................................................................................................................. 31

    7.2. Costos............................................................................................................................. 31

    7.2.1. Maquinas Virtuales................................................................................................ 31

    7.2.2. Criterios de Mejoramiento .................................................................................... 33

    7.2.3 herramientas para el anlisis del flujo de datos................................................. 33

    8. Generacin de cdigo objeto. ............................................................................................ 34

    8.1 Lenguaje mquina. ........................................................................................................ 34

    8.1.1 Caractersticas ...................................................................................................... 36

    8.1.2 Direccionamiento ................................................................................................. 37

    8.2 Lenguaje ensamblador ................................................................................................. 38

    8.2.1 Caractersticas ........................................................................................................ 38

    8.2.2 Almacenamiento ..................................................................................................... 39

    8.3 Registros........................................................................................................................ 39

    8.3.1 Distribucin .............................................................................................................. 41

    8.3.2 Asignacin ............................................................................................................... 41

    8.4 Administracin de memoria .......................................................................................... 42

    Bibliografa................................................................................................................................. 43

  • 7/31/2019 49289218 Antologia de Pro Todo

    4/44

    PROGRAMACION DE SISTEMAS

    4

    INTRODUCCION

    En esta investigacin de las ultimas unidades de la materia se estudiara laforma en la que debemos utilizar algunas mtodos a la hora de la elaboracinde un lenguaje para la programacin, la cual tiene que cumplir con las

    necesidades de un programador y que dicho lenguaje funcione correctamente ypueda cumplir con las expectativas del programador as como del programa aelaborar en dicho lenguaje y cumplir con las caractersticas de un lenguaje deprogramacin.

    Algunos de los temas que se abordaran en esta investigacin son anlisissemntico que se ayudara en la verificacin de la semntica utilizada en unlenguaje as como de igual manera en otros aspectos de igual importancia enun compilador de lenguaje, tambin en la optimizacin del lenguaje para vercon que este va a trabajar, como la generacin de cdigo objetos q interpreta ointerpretaran diferentes formas como la interaccin con el lenguaje mquina ya su vez en lenguaje ensamblador.

  • 7/31/2019 49289218 Antologia de Pro Todo

    5/44

    PROGRAMACION DE SISTEMAS

    5

    Unidad 5: Anlisis semntico

    Se compone de un conjunto de rutinas independientes, llamadas por losanalizadores morfolgico y sintctico.

    El anlisis semntico utiliza como entrada el rbol sintctico detectado por elanlisis sintctico para comprobar restricciones de tipo y otras limitacionessemnticas y preparar la generacin de cdigo.

    En compiladores de un solo paso, las llamadas a las rutinas semnticas serealizan directamente desde el analizador sintctico y son dichas rutinas lasque llaman al generador de cdigo. El instrumento ms utilizado paraconseguirlo es la gramtica de atributos.

    En compiladores de dos o ms pasos, el anlisis semntico se realizaindependientemente de la generacin de cdigo, pasndose informacin atravs de un archivo intermedio, que normalmente contiene informacin sobreel rbol sintctico en forma linealizada (para facilitar su manejo y hacer posiblesu almacenamiento en memoria auxiliar).

    En cualquier caso, las rutinas semnticas suelen hacer uso de una pila (la pilasemntica) que contiene la informacin semntica asociada a los operandos (ya veces a los operadores) en forma de registros semnticos.

    Semntica de instrucciones condicionales

    Sean las reglas ::= If S2 then S1 |

    If S2 then else S3 S1

    Una secuencia de cudruplas equivalente a "If E1 then I1 else I2"

    (p-1) (?,?,?,t1) Anlisis de E1(p) (TRZ,(q+1),t1,) S2: Crear cudrupla (p) | Push p

    ... Anlisis de I1(q) (TR,(r),,) S3: Crear cudrupla (q)

    Poner (cl.sig.) en top | PopPush (q)(q+1) ... Anlisis de I2(r) S1: Poner (cl.sig.) en top | Pop

    Una secuencia de cudruplas equivalente a "If E1 then I1"

    (p-1) (?,?,?,t1) Anlisis de E1(p) (TRZ,(r),t1,) S2: Crear cudrupla (p) | Push p

    ... Anlisis de I1(r) S1: Poner (cl.sig.) en top | Pop

  • 7/31/2019 49289218 Antologia de Pro Todo

    6/44

    PROGRAMACION DE SISTEMAS

    6

    Al generar la cudrupla (p) no conocemos el valor de (q). Guardamos en unapila el nmero de la cudrupla asociada y lo rellenamos ms tarde, comoindican los ejemplos.

    Semntica de etiquetas y GOTO

    Suponemos que las etiquetas aparecen en la tabla de smbolos con tresvalores asociados: (tipo=etiqueta, bit=declarada/no declarada, nmero decudrupla).

    Sea la regla

    ::= id :

    Semntica asociada:

    {Buscar id en la tabla de smbolos;if (no est)

    Insertar id,valor=(etiqueta, declarada, cudrupla siguiente);else {

    if (tipo==etiqueta && bit==no declarada) {i=nmero de cudrupla;while (i) {j=cudrupla[i][2];cudrupla[i][2]=cudrupla siguiente;i=j;}

    Cambiar valor a (etiqueta, declarada, cudrupla siguiente);}

    else error();}

    }

    Sea la regla

    ::= GOTO id

    Semntica asociada:

    {Buscar id en la tabla de smbolos;if (no est) {

    Insertar id,valor=(etiqueta, no declarada, cudr.siguiente);Generar cudrupla (TR,,,);}

    else {if (tipo==etiqueta) {

    if (bit==declarada)Generar cudrupla (TR,nmero de cudrupla,,);

  • 7/31/2019 49289218 Antologia de Pro Todo

    7/44

    PROGRAMACION DE SISTEMAS

    7

    else if (bit==no declarada) {i=nmero de cudrupla;Cambiar valor a (etiqueta, no declarada, cudr.siguiente);Generar cudrupla (TR,i,,);}

    }else error();}

    }

    Si se permiten etiquetas locales a bloques, podemos encontrar el siguientecaso:

    L: ...{

    ...

    GOTO L;...

    Tenemos ambigedad: GOTO L puede ir a la etiqueta externa (ya definida ono) o a una etiqueta local al bloque posterior a la instruccin. Tenemos tresposibilidades:

    Un compilador en dos pasos.

    Forzar declaraciones de etiquetas.

    Tratar L en el bloque como si fuera local. Si al final del bloque descubrimos queno ha sido declarada, tratarla como si fuera global. La lista de referenciasdebera fundirse con la de L global (si L global no ha sido definida an) orellenarse con el valor de L (si ya ha sido definida). Si L global no existe, debecrearse, y pasarle la lista de referencias de L local.

    5.1 ANALIZADOR SEMNTICO

    Ajuste significativoComprobacin de tipos: operandos-operadoresComprobacin del flujo de control:

    for (;;)}break;w= a+2;{

    Comprobacin de unicidadint a;

  • 7/31/2019 49289218 Antologia de Pro Todo

    8/44

    PROGRAMACION DE SISTEMAS

    8

    char a; //una sola vezComprobacin relacionada con nombres

    Tabla de smbolos: Estructura en memoria

    Almacena informacin sobre los tiposSistemas de tipo:Tipo bsico: entero, carcter, real, lgicoNombres de tipo

    Constructores de tipo: estructuras, uniones, ObjetosApuntadores: referencias a tiposFunciones a=suma ();Sistema de tipos: conjunto de reglas que determinan el criterio paraasignar expresiones de tipo a las diferentes partes del cdigo fuente.

    Cada analizador semntico implementa un sistema de tiposComprobacin dinmica y estticaEsttica: compilacinDinmica: Ejecucin char a [5]; strcpy(a, abcdefghijk);

    Fuertemente tipificadoDbilmente tipificado Smbolo

    }nombre;tipo ;mbito;{

    5.2 VERIFICACIN DE TIPOS EN EXPRESIONES

    Se emplean para establecer el tipo de una construccin del lenguaje; estapuede ser o un tipo simple (predefinido por el lenguaje), o estar formado por laaplicacin del operador especial llamado constructor de tipos a otrasexpresiones de tipos.

    Tipos simples.- Son los tipos predefinidos por el lenguaje. Como por ejemploint, float, double

    Nuevos tipos simples.- En algunos lenguajes es posible definir nuevos tipossimples. Estos nuevos tipos simples suelen ser subintervalos de tipos simples olos tipos enumerated.

    Tipos estructurados.- Son tipos creados por constructores de tipo, tales comoarray, record o struct. Tales constructores toman los tipos ya creados como

    parmetros y devuelven nuevos tipos con una estructura que depende delconstructor.

  • 7/31/2019 49289218 Antologia de Pro Todo

    9/44

    PROGRAMACION DE SISTEMAS

    9

    - Array: Toma dos parmetros de tipo el tipo ndice y el tipo componente. Paratener acceso a un componente del tipo array, se hace uso del ndice. Confrecuencia existen restricciones acerca de los tipos que se pueden presentarcomo tipos ndice. Normalmente los tipos que se utilizan son ordinales, para los

    cuales hay un predecesor y un sucesor. Una complicacin de estos tipossuelen ser los tipos multidimensionales.

    - Record: Un constructor de este tipo toma una lista de nombres y tiposasociados construyendo un nuevo tipo. Para tener acceso a un componente deltipo record se hace uso del nombre del componente al cual se quiere acceder.

    - Pointer: Si T es una expresin de tipo, pointer (T) es una expresin de tipoque indica un apuntador a un objeto T.

    Nombres de tipo.- Son alias que se le pueden dar a los tipos.

    Inferencia y verificacin de tipos

    La inferencia y verificacin de tipos se realizan teniendo en cuenta tresacciones, las declaraciones las sentencias y las expresiones.Las declaraciones causan que el tipo de un identificador se introduzca en latabla de smbolos, asocindole un tipo al mismo.

    Ej;i : intse corresponde con la regla gramatical:var-decl id : tipo-expy la accin semntica asociadainsert (id.name, tipo-exp.type)que aade un identificador en la tabla de smbolos y le asocia un tipo.

    Las sentencias no tienen tipos en s mismas sino subestructuras que esnecesario verificar en cuanto a la exactitud del tipo

    Ej;If expresin then sentenciaSe corresponde con la regla gramatical:Sent if exp then sent

    Y la accin semntica asociadaIf not typeEqual (exp.type, bolean) then type-error (sent)que lo que hace es comprobar que exp es de tipo booleano, y si no es

    as enva un error.Las expresiones constantes como nmeros y valores bolanos, tienen

    los tipos implcitamente definidos. Los nombres de variables tienen sus tiposdeterminados mediante una bsqueda en la tabla de smbolos. Lassubexpresiones tienen que ser del tipo correcto para la operacin indicada enla expresin.

    Ej;- sent id:= exp

    Provoca la accin semnticaIf not typeEqual (lookup(id.name),exp.type) then type-error (sent)

  • 7/31/2019 49289218 Antologia de Pro Todo

    10/44

    PROGRAMACION DE SISTEMAS

    10

    - exp1 exp2 or exp3

    Provoca la accin semnticaIf not (typeEqual (exp2.type, boolean) and typeEqual (exp3.type,Boolean)) then type-error (exp1);

    Equivalencias de expresiones de tipo

    En el apartado anterior hemos utilizado la funcin typeEqual (t1,t2: TypeExp) :boolean. Todo verificador de tipos debe saber cuando dos expresiones de tiporepresentan al mismo tipo, y de eso es de lo que se encarga esta funcin.La equivalencia de tipos se puede explicar haciendo uso de los conceptos deequivalencia estructural y equivalencia de nombre. El anlisis se hace medianteuna representacin de grafos de las expresiones de tipos, con hojas para lostipos bsicos y nodos interiores para los constructores de tipo.

    Ejemplo;La expresin de tipo:RecordX: pointer to realY: array [10] of inEndEsta expresin se puede representar mediante el rbol sintctico.

    Record

    Var

    (x)

    Pointer

    IntReal

    Array (10)

    Var

    (y)

  • 7/31/2019 49289218 Antologia de Pro Todo

    11/44

    PROGRAMACION DE SISTEMAS

    11

    Ya que las expresiones de tipos se construyen a partir de tipos bsicos yconstructores, una nocin natural de equivalencia entre dos expresiones detipos es la equivalencia estructural; es decir dos expresiones son, o bien elmismo tipo bsico, o estn formadas aplicando el mismo constructor a tiposestructuralmente equivalentes.Dada la siguiente gramtica:

    P D ; ED D ; DD id : TT char

    T integerT T1

    T array [ nm ] of T1

    La verificacin de los tipos de datos se hace asignando el valor de tipode cada una de los componentes lxicos.Estos valores se comparan para verificar que los tipos de datoscoincidan y sean congruentes, de lo contrario no se pueden realizar losclculos.

    5.3 CONVERSIN DE TIPOS

    En ciencias de la computacin la conversin de tipos (type casting en ingls) se

    refiere a la transformacin de un tipo de dato en otro. Esto se hace para tomar

    las ventajas que pueda ofrecer el tipo a que se va a convertir. Por ejemplo, los

    valores de un conjunto ms limitado, como nmeros enteros, se pueden

    almacenar en un formato ms compacto y ms tarde convertidos a un formato

    diferente que permita las operaciones que anteriormente no eran posibles, talescomo la divisin con decimales.

    Hay dos tipos de conversin: la implcita y la explcita. En la implcita se

    convierte un tipo de dato de menor rango a un supertipo (tipo de dato de mayor

    rango); este tipo de conversin lo realiza el compilador, ya que no hay prdida

    de datos si, por ejemplo, se pasa un int (tipo entero) a long.

    En la conversin explcita, el compilador no es capaz de realizarla por s solo y

    por ello debe definirse explcitamente en el programa.

    Existen varios tipos de conversin explcita:

  • 7/31/2019 49289218 Antologia de Pro Todo

    12/44

    PROGRAMACION DE SISTEMAS

    12

    controlada: antes de realizar la conversin se controla en tiempo de

    ejecucin si el tipo de destino puede tener el valor de origen, y si no

    se produce un error.

    no controlada: no se realiza ningn control, si el tipo de dato destino

    no puede contener al de origen el resultado es indefinido(generalmente se produce un desbordamiento de bfer y en algunos

    casos como en java el cambio se produce sin mayores

    consecuencias).patrn de bits: La representacin de bits en bruto de la fuente es una copialiteral, y se reinterpreta de acuerdo con el tipo de destino. Esto tambin puedelograrse a travs de aliasing.

    Hay situaciones en las cuales se tiene un valor de un tipo dado y sedesea almacenar ese valor en una variable de un tipo diferente.En algunos tipos es posible almacenar simplemente el valor sin unaconversin de tipos; lo que se denomina conversin automtica.

    Esto slo es posible en algn lenguaje de programacin, si el compiladorreconoce que la variable destino tiene la suficiente precisin paracontener el valor origen.En Java se puede almacenar un valor byte en una variable int, dado queeste tipo de datos es de mayor precisin que el primero.

    A esto se le llama ensanchamiento o promocin, dado que el tipo mspequeo se ensancha o promociona al tipo compatible ms grande. Sipor el contrario, se desea asignar un valor de variable int a una variablebyte se necesita realizar una

    Conversin de tipos explcita.En algunos casos se puede realizar la conversin pero se pueden perderdatos, como por ejemplo al pasar un valor flotante a un entero.A esto se le llama estrechamiento, dado que se estrecha explcitamenteel valor para que quepa en el destino.

    La conversin de un tipo se realiza poniendo delante un nombre de tipoentre parntesis, por ejemplo, (tipo) valor.byte a; int b; a=(byte) b;Existen dos tipos de comprobacin: esttica y dinmica.La comprobacin ayuda a evitar la mayora de los errores deprogramacin. Ejemplos:Comprobacin de tipos. Para saber si el operador aplicado a losoperadores es correcto

    Comprobacin de flujo de control. Se debe verifica que las instruccionesque cambia el flujo de un programa sean vlidos. Ejemplo: break, goto.Comprobacin de unicidad: definir un objeto una sola vez.

  • 7/31/2019 49289218 Antologia de Pro Todo

    13/44

    PROGRAMACION DE SISTEMAS

    13

    Comprobacin relacionadas con nombres. El mismo nombre debeaparecer dos veces. Variables que se declaran pero no utilizan.La comprobacin de tipos es la ms complicada. Las demscomprobaciones son rutinarias.El operador % ocupa que los dos operandos sean enteros.

    es una funcin suma(a,b) que est sobrecargada para distintos tipos dedatos.

    Siempre se disean reglas de tipos como los valores numricos seconvierten al de mayor jerarqua o el tipo de datos punteros slo apuntaal tipo de datos declarado.Algunos lenguajes revisan el tamao de los arreglos (Java) de maneraesttica otros lo hacen de manera dinmica (en tiempo de ejecucin).

    Diferenciar el uso de +, * enteros que con puntero (aritmtica depunteros)

    Al conjunto de reglas que se definen para la comprobacin de los tiposde datos se denomina sistema de tiposLa mayora de veces la recuperacin de errores se l suele omitir ya queel programa no finaliza pero tal vez no obtenga los valores deseados.

    Generalmente en la etapa de anlisis sintctico se suelen agregar lostipos a la tabla de smbolos.Se revisa el rbol sintctico para comprobar los tipos asignados.Existen conversiones explcitas en las cuales el usuario indica el tipo dedatosa = (int)(23.3/18.2);Las conversiones implcitas requieren de mayor tiempo de ejecucin.Un ciclo de 1 a N tard 5.4 y 48.4 nanosegundos utilizando conversionesimplcitas.

    Polimorfismo: una funcin puede tener el mismo nombre con diferenteselementos. El tipo de datos debe ser diferente.Un ejemplo de polimorfismo son las plantillas en algn lenguaje deprogramacin.Se debe considerar el mbito de las variables (locales y globales).

    Conversin de tipos

    Una extensin comn de las reglas de tipo de un lenguaje es permitirexpresiones aritmticas de tipo mezclado tal como 2 + 3.1 donde se suman unnmero real y un nmero entero. En tales casos, debe hallarse un tipo comnque sea compatible con todos los tipos de las subexpresiones y debenaplicarse operaciones para convertir los valores en tiempo de ejecucin a lasrepresentaciones apropiadas antes de aplicar el operador. En el ejemploanterior el entero 2 debera convertirse a punto flotante antes de la suma, y la

    expresin resultante ser del tipo suma. Existen dos formas que un lenguajepueda tomar para tales conversiones.

  • 7/31/2019 49289218 Antologia de Pro Todo

    14/44

    PROGRAMACION DE SISTEMAS

    14

    Una forma que el programador suministrase la funcin de conversin demanera que ejemplo anterior sera FLOAT(2) + 3.1 o se causar un error detipo.El otro mtodo consistira en que el verificador de tipo suministre la operacinde conversin de manera automtica, basndose en los tipos de las

    subexpresiones. Las conversiones automticas se conocen como coercin. Lacoercin se puede expresar de manera implcita mediante el verificador de tipo,ya que el tipo inferido de una expresin cambia a partir de una sobreexpresin.

    5.4 Acciones agregadas en un analizador sintctico descendente (top-down)

    Muchas de las actividades que realiza un analizador semntico no son

    estndares, dependern del objetivo del lenguaje de programacin; porejemplo, en algunas aplicaciones es interesante conocer que los datosestn en algn rango vlido o que ciertos valores se utilicen para usoreservado

    En algunas ocasiones nos interesa conocer el significado de laspalabras de algn lenguaje dependiendo del contexto (gramticas detipo 1) para diferenciar palabras poli semnticas.La Web es una base de datos en la mayora de los casos sin sentidospor lo que la tercera generacin de la Web ser la llamada Websemntica. ntica en un .

    En un parser recursivo-descendente, el cdigo de las accionessemnticas es mezclado dentro del flujo de control de las acciones delparser. En un parser especificado en java CC, las acciones semnticasson fragmentos de cdigo de programa en java unido a lasproducciones gramaticales.Cada smbolo terminal y no terminal puede asociarse con su propio tipode valor semntico.

    Por ejemplo en la siguiente gramtica para YACC de una calculadorasimple, el tipo asociado con exp e INT podra ser int:

    %token INT PLUS MINUS TIMES UMINUS

    %start exp%left PLUS MINUS%left TIMES%left UMINIS exp: INT | exp PLUS exp | exp MINUS exp | exp TIMES exp 1MINUS exp %prec UMINUS

    Los otros tokens no necesitaran tener un valor.Por otra parte el tipo asociado a un token debe por supuestocoincidir con el tipo de token que el scanner retorne.Para una regla ABCD, la accin semntica debe retornar un

    valor cuyo tipo es el asociado al no terminal A. Pero puede

  • 7/31/2019 49289218 Antologia de Pro Todo

    15/44

    PROGRAMACION DE SISTEMAS

    15

    construir este valor de los valores asociados a los terminales y noterminales B, C, D.

    Recursivo-descendente

    En un parser recursivo-descendente, las acciones semnticas sonlos valores retornados por las funciones de parsing, o los efectoslaterales de esas funciones o ambos.Por cada smbolo terminal y no terminal, asociamos un tipo(desde el lenguaje de implementacin del LP del compilador) devalor semntico representando frases derivadas desde ese

    smbolo.El siguiente programa es un intrprete recursivo descendentepara una parte de la gramtica en la cual eliminamos la recursinpor la izquierda (por conveniencia la volvemos a mostrar):S E$ ET E E+ T E E - T E E lTF T T* F T T/ F T T lF id F num F (E)

    5.5 Pila semntica en un analizador sintctico ascendente (bottom-up).

    Como fue visto en el capitulo anterior (4), un parser ascendenteutiliza durante el anlisis una pila. En esta va guardando datosque le permiten ir haciendo las operaciones de reduccin quenecesita.Para incorporar acciones semnticas como lo es construir el rbolsintctico, es necesario incorporar a la pila del parser otra

    columna que guarde los atributos de los smbolos que se vananalizando.Estos atributos estaran ligados a la correspondiente produccinen la tabla de parsing (consultar seccin 5.3 del libro de Aho,Ullman, Sethi para verms detalles de la implementacin).El diseo ascendente se refiere a la identificacin de aquellosprocesos que necesitan computarizarse con forme vayanapareciendo, su anlisis como sistema y su codificacin, o bien, laadquisicin de paquetes de software para satisfacer el problemainmediato.

  • 7/31/2019 49289218 Antologia de Pro Todo

    16/44

    PROGRAMACION DE SISTEMAS

    16

    Pila semntica

    Los problemas de integracin entre los subsistemas son sumamentecostosos y muchos de ellos no se solucionan hasta que la programacin

    alcanza la fecha lmite para la integracin total del sistema.Se necesita una memoria auxiliar que nos permita guardar los datosintermedios para poder hacer la comparacin.

    5.6 Administracin de la tabla de smbolos

    La tabla de smbolos tambin recibe el nombre de ambiente. Unambiente contiene un conjunto de parmetros que slo son visibles enese ambiente.La tabla de smbolos se mantiene durante todo el proceso de traduccinagregando elementos especficos en cada paso.

    Operaciones sobre la tabla de smbolosInserta(smbolo)

    Existe(nombre)Tipo(nombre)TIPO {tipo = obtengo (yytext());} Declaracinlistavar PYCvar {inserta(smbolo);} | var Listavar{Inserta (smbolo) ; }ID {simbolo=yytext; smbolo.tipo=tipo; Varsimbolo.amb=ambito;}

    Operaciones sobre la tabla de smbolosPI exprlog {A=A;} PD Exprlog

    |NOT exprlog {A=A;}|exprlog {A1=A;} OPLOG exprlog

    {A2=AIf(A1==INT && A2==INT)A=INT;ElseA=ERROR_TIPO;}

    El anlisis semntico conecta las definiciones de las variables con sususos, checa que cada expresin tenga un tipo correcto y traduce la

    sintaxis abstracta a una representacin mas simple para generar cdigomquina.

  • 7/31/2019 49289218 Antologia de Pro Todo

    17/44

    PROGRAMACION DE SISTEMAS

    17

    Esta fase es caracterizada por el mantener la tabla de smbolos(tambin llamada environment) la cual mapea identificadores con sus

    tipos y localidades.

    Cada variable local en un programa tiene un mbito (scope) dentro del cual es

    visible. Por ejemplo, en un mtodo Mini Java m, todos los parmetros formalesy variables locales declarados en m son visibles solo hasta que finalice m.

    Un ambiente es un conjunto de atados (bindings) denotados por. Por ejemplo, podemos decir que el ambiente z0 contiene losatados {gstring,aint}, que significa que el identificador a esuna variable entero y g es una variable string.Ejemplo

    Suponer que compilamos esta clase en el ambiente z0. Las

    declaraciones de campo en lnea 2 nos da la tabla z1 igual a z0 +{aint,bint,cint}. Los identificadores en lnea 4 pueden encontrarse(look up) en ambiente z1. En lnea 5, la tabla o ambiente z2=z1+{jint}es creada; y en lnea 6, z3=z2+{astring} es creada.

    Implementacin de la Tabla

    Existen dos opciones: El estilo funcional donde cuando z1 existe yz2 es creado, z1 sigue existiendo. Y el imperativo en donde z1 esdestruido al crearse z2. Mientras z2 existe no podemos mirar z1.

    Pero al morir z2, z1 de nuevo existe.Mltiple Tablas de Smbolos

    En algunos LP pueden existir varios ambientes a la vez: Cadamdulo, o clase o registro en el programa tiene una tabla desmbolos z propia. Ejemplos (ML y Java).

  • 7/31/2019 49289218 Antologia de Pro Todo

    18/44

    PROGRAMACION DE SISTEMAS

    18

    Al analizar los 2 programas anteriores, sea z0 el ambiente baseconteniendo funciones predefinidas, y sea

    z1={aint}

    z2={Ez1}

    z3={bint,aint}

    z4={Nz3}

    z5={dint}

    z6={Dz5}

    z7=z2+z4+z6

    En ML, N es compilado usando el ambiente z0+z2 para buscar losidentificadores en la tabla;D es compilado usando z0+z2+z4 y elresultado del anlisis es {Mz7}.En Java, referencias adelantadas son permitidas (dentro de N laexpresin D.d sera legal), asi E,N y D son compilados en elambiente z7.

    TABLAS DE SIMBOLOS EN LENGUAJES IMPERATIVOS

    Un programa grande puede contener miles de distintosidentificadores. Esto hace que la bsqueda en la tabla (loock up)tenga que ser eficiente.En ambientes imperativos usualmente se usan tablas dedispersin. La operacin z=z+{at} es implementada insertandot en la tabla de dispersin usando la llave a. Una tabla dedispersin con encadenamiento externo funciona bien y soportaeliminacin fcil de at para recuperar z al final del mbito de a.El siguiente programa implementa una tabla de dispersin. Elbucket i es una lista ligada de todos los elementos cuya llave

    genere i mod SIZE.

  • 7/31/2019 49289218 Antologia de Pro Todo

    19/44

    PROGRAMACION DE SISTEMAS

    19

    Considere z+{at2} cuando z ya contiene at1. La funcin insertdeja at1 en el bucket y pone at2 antes en la lista. Entonces,cuando pop se realiza despus del ambito de a, z es restaurado.

    SIMBOLOS

    Para evitar comparaciones innecesarias de cadenas podemosconvertir cada cadena a un smbolo, y as todas las diferentesocurrencias de cualquier cadena se conviertan a un mismo objetosmbolo.El mdulo smbolo implementa los smbolos y tiene estaspropiedades:Comparar smbolos por igualdad o por mayor es rpido(comparacin por apuntador o por entero).Extraer una llave hash de tipo entero es rpidoLos ambientes son implementados en la clase Symbol.Tablecomo Tables mapeando Symbols a ligados (bindings).Para eso se manejan ligaduras para diferentes propsitos en elcompilador ligadura para tipos, para variables, para funciones,etc.Entonces, una ligadura es un Objeto.Para implementar la clase Symbol, usaremos el mtodo intern()(java.lang.String), para darnos un objeto nico a partir de unacadena de caracteres.

    Para el uso de la tabla de smbolos usaremos java.util.Hashtable.La funcin beginScope recuerda el estado actual de la tabla yendScope restaura la tabla a donde estaba en el mas recientebeginScope que no ha terminado.Cuando la atadura xb es metido a la tabla (table.put(x,b)), x esdispersado a un ndice i, y un objeto binder xb es puesto en lacabeza de la lista ligada para el bucket i.Si la tabla ya tiene una ligadura xb, esto permanecera en elbucket, pero escondido por xb. Esto es importante ya que

    soportara la implementacin de undo (beginScope y endScope).Tambin deber existir una pila auxiliar, que muestre en queorden los smbolos son metidos (pushed) a la tabla de smbolos.Cuando xb es encontrado, entonces x es metido a la pila(beginScope). Entonces, para implementar endScope, lossmbolos deben sacarse de la pila.

    Por ejemplo, considere la siguiente figura, que muestra un programa ysu tabla de smbolos.

  • 7/31/2019 49289218 Antologia de Pro Todo

    20/44

    PROGRAMACION DE SISTEMAS

    20

    5.7 Manejo de errores semnticos.

    Los errores semnticos son pocos y los que existen no se puedendetectar tan fcilmente.Hasta esta etapa los errores son mostrados a los usuarios. Los demserrores ya son muy difciles de detectar y generalmente se dan entiempo de ejecucin

    Algunos problemas se presentan durante la fase de gestin de memoriaal pasar argumentos o al crear la pila semntica.Muchos errores se generan durante la etapa del enlazador, al tratar deobtener cdigo existente de algunas funciones/mtodos ya

    implementadas en bibliotecas/APIs

    Cuando el checador de tipos detecta un error de tipos o un identificadorno declarado, debe imprimir el mensaje de error y continuar.Esto debido a que normalmente el programador prefiere que ledescriban todos los errores posibles del programa fuente.Esto quiere decir, que si un error de tipos es encontrado, no debeproducirse un programa objeto por parte del compilador.As, las siguientes fases no deben ejecutarse.

    Hasta esta etapa (chequeo de tipos), la parte del compilador se conocecon el nombre de front End.

    REGISTROS DE ACTIVACION

    En casi cualquier LP, una funcin (mtodo) puede tener variableslocales que son creadas cuando se llama la funcin (al entrar a esta).Diferentes invocaciones a la funcin pueden existir a la vez, y cadainvocacin tiene su propia instanciacin de variables.

    En el siguiente mtodo de Java

  • 7/31/2019 49289218 Antologia de Pro Todo

    21/44

    PROGRAMACION DE SISTEMAS

    21

    Una nueva instancia de x es creada (e inicializada por el llamador de f)cada vez que f es llamada. Debido a que existen llamadas recursivas,

    muchas de esas x existen simultneamente. Similarmente, una nuevainstancia de y es creada cada vez que el cuerpo f es iniciado.

    En muchos LP (incluyendo Pascal, C y java), las variables localesson destruidas cuando una funcin retorna. Ya que las variables

    locales son creadas y destruidas en una forma LIFO, podemosusar una pila para manejarlas.

    MARCOS DE PILA

    Debido a que se trabaja con bloques de datos por funcin unpush y pop no funciona.Entonces la pila es tratada como si fuera un gran arreglo, con unregistro especial- el stack pointer que apunta a una localidad.Todas las localidades despus del apuntador son basura y todaslas que estn antes estn asignadas.El rea en la pila dedicada a las variables locales, parmetros,direccin de retorno y otras variables temporales para una funcines llamada el registro de activacin o marco de pila de la funcin.El diseo de la estructura de los marcos es de acuerdo con laarquitectura y el LP que se compila.Aunque normalmente el constructor de la arquitectura define undiseo de marco standard para todos los compiladores para esaarquitectura.

  • 7/31/2019 49289218 Antologia de Pro Todo

    22/44

    PROGRAMACION DE SISTEMAS

    22

    Marco de Pila

    Los argumentos de entrada son los pasados por el llamador(tcnicamente son parte del marco anterior pero puedenaccesarse usando un desplazamiento del apuntador de marco).

    Cuando la funcin actual llama otras funciones, puede usar elespacio de los argumentos de salida para pasar parmetros.La direccin de retorno es creada por la instruccin CALL.Las variables locales tambin tienen su espacio.Las variables mantenidas en registros algunas veces sonsalvadas a memoria.

    El Apuntador de Marco (FP)

    Suponer que una funcin g() llama la funcin f(a1,an).

    Diremos que g es el llamador (caller) y f el llamado (callee). Alentrar a f, el apuntador de la pila (SP) apunta al primer argumentoque g pasa a f. Al entrar, f coloca un marco solo con restar eltamao del marco de el SP.El viejo SP se convierte en el actual FP y el viejo FP es salvadoen el marco.Cuando FP termina, solo copia FP de regreso a SP y regresa elvalor viejo salvado de FP.Si los marcos son siempre del mismo tamao entonces no es

    necesario contar con FP y todo se simplifica sumando o restandola constante framesize a SP.

    Registros

    Por eficiencia, es importante mantener las variables locales,resultados intermedios y otros valores en registros en lugar de lapila de marcos.Si funcin f llama a g y ambas hacen uso de registro r, entonces rdebe ser salvado (dentro de la pila de marcos) antes de que lo

    use g y restaurado (desde la pila) despus de que termine g.de quien es responsabilidad de salvar r? de f o g? si lo salva fse dice que r es un registro caller-save; si lo salva g se llamacallee-save.

    Pase de Parmetros

    Estudios actuales han mostrado que raramente una funcin pasamas de 4 parmetros.Debido a esto, la mayora de las mquinas definen que losprimeros k argumentos (con k=4) se pasan en registros y el restoen memoria.

  • 7/31/2019 49289218 Antologia de Pro Todo

    23/44

    PROGRAMACION DE SISTEMAS

    23

    Direcciones de Retorno

    Si g llama a f, entonces si la instruccin call dentro de g est endireccin a, el lugar de retorno en g es a+1, la siguienteinstruccin del call.

    En mquinas modernas la direccin de retorno es pasada a unregistro en lugar de la memoria.En funciones hoja la direccin no necesita ponerse en la pila.

    Registros vs. Memoria

    Registros siempre deben usarse en asignacin a menos que:La variable sea pasada por referenciaLa variable es accesada por una funcin anidada dentro de lafuncin actual.

    El valor es demasiado grande para un registro.La variable es un arreglo, donde es necesario realizar aritmticade direcciones.El registro que contiene la variable es necesitado para otrospropsitos.Existen demasiadas variables locales y valores temporales

    Ligas Estticas (Static Links)

    En LP que admiten funciones anidadas (Pascal,ML y Java) las

    funciones de mas adentro pueden usar variables declaradas enfunciones de mas afuera (Estructuras de Bloque).En el siguiente programa (sig. Diapositiva) la funcin write hacereferencia a la variable de afuera output e indent hace referencia a ny output. Para cumplir con esto, indent debe tener acceso no solo asu propio marco (para i y s) sino tambin a los marcos de show (porn) y prettyprint (por output).Programa de funciones Anidadas

  • 7/31/2019 49289218 Antologia de Pro Todo

    24/44

    PROGRAMACION DE SISTEMAS

    24

    Existen varios mtodos para solucionar lo anterior:Siempre que una funcin f sea llamada, puede pasarse unapuntador a el marco de la funcin que estticamente encierra a f;este apuntador es la liga esttica.Un arreglo global puede mantenerse, conteniendo -en posicin i -un apuntador a el marco del procedimiento mas recientementeactivado cuyo profundidad de anidamiento esttico es i. Estearreglo es llamado un display.

    6. GENERACION DE CODIGO INTERMEDIO

    6.1Generador de cdigo intermedio

    La administracin de la memoria se da enesta etapa.Se debe considerar tanto la memoria estticacomo dinmica, y en esta seutilizangeneralmente pilas.Los lenguajes intermedios generalmentetienen rboles de derivacin mspequeosque su contraparte original.Se puede representar un rbol sintctico conun Grafo Dirigido As clic (GDA).La notacin postfija es una maneralinealizada de representar un rbolsintctico.

    a := b*-c+b*-cabc -*bc -*+=

    x := y op zx+y*zt1:=y*zt2:=x+t1

    Los lenguajes intermedios nos sirven pararepresentar la produccin final denuestrolenguaje fuente.Existen muchos lenguajes intermedios, la mayora de ellos son unarepresentacinms simplificada del cdigo original parafacilitar la traduccinhacia el cdigo final.Otros lenguajes intermedios sirven de base ocomo representacin parcial de

    otrosprocesos.

  • 7/31/2019 49289218 Antologia de Pro Todo

    25/44

    PROGRAMACION DE SISTEMAS

    25

    Por ejemplo al compilar un programa en C en Windows o DOS, se produce uncdigoobjeto con extensin .obj para queposteriormente el enlazador creefinalmenteel cdigo ejecutable .exe

    6.2 NotacionesLas notaciones sirven de base para expresarsentencias bien definidas.El uso ms extendido de las notaciones sirve para expresar operacionesaritmticas.Las expresiones aritmticas se pueden expresar de tres formas distintas: infija,prefija y postfija.

    6.2.1InfijaLa notacin infija es la ms utilizada por los humanos porque es la mscomprensible yaque ponen el operador entre los dosoperandos. Por ejemploa+b-5.No existe una estructura simple pararepresentar este tipo de notacin en lacomputadora por esta razn se utilizan otrasnotaciones.

    6.2.2 PostfijaLa notacin postfija pone el operador al finalde los dos operandos, por lo quelaexpresin queda: ab+5-La notacin posftfija utiliza una estructura del tipo LIFO (Last In FirstOut) pila, lacual es la ms utilizada para la implementacin.

    6.2.3 Prefija

    La notacin prefija pone el operador primeroque los dos operandos, por lo quelaexpresin anterior queda: +ab-5. Esto se representa con una estructura deltipo FIFO(First In FirstOut) o cola.Las estructuras FIFO son ampliamente utilizadas pero tienen problemas conelanidamiento aritmtico.

  • 7/31/2019 49289218 Antologia de Pro Todo

    26/44

    PROGRAMACION DE SISTEMAS

    26

    6.3 Representacin de cdigointermedio

    Existen maneras formales para representar cdigo intermedio.Estas notaciones simplifican la traduccin de nuestro cdigo fuente a nuestro

    cdigo objeto ya que ahorran y acotan smbolos de la tabla de smbolos

    6.3.1 Notacin Polaca

    La notacin polaca, tambin conocida como notacin de prefijo o notacinprefija, 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 susoperandos. Si la aridad de los operadores es fija, el resultado es una sintaxisque carece de parntesis u otros signos de agrupacin, y todava puede seranalizada sin ambigedad. El lgico polacoJanukasiewicz invent estanotacin alrededor de 1920 para simplificar la lgica proposicional.

    Notacin polaca.

    6.3.2 Cdigo P

    El cdigo P hace referencia a mquinas que utilizan o se auxilian de pilas paragenerar cdigo objeto.En muchos caso la P se asociado a cdigo portable el cual garantiza que elcdigo compilado en una mquina se puedaejecutar en otras.

    Para garantizar la portabilidad del cdigo senecesita que el lenguaje esteestandarizadopor algn instituto y que dicho cdigo notenga extensionesparticulares.

    6.3.3 Triplos

    Las proposiciones de tres direcciones se parecen mucho al ensamblador, elcual es unlenguaje intermedio ms entendible para la mquina.Las estructuras de control (if, switch, while,do-while, for) son realmenteetiquetas gotodisfrazadas.

    El problema de utilizar cudruplos radica en que se tienen que colocar losvalorestemporales en la tabla de smbolo.

    http://es.wikipedia.org/wiki/L%C3%B3gicahttp://es.wikipedia.org/wiki/Aritm%C3%A9ticahttp://es.wikipedia.org/wiki/%C3%81lgebrahttp://es.wikipedia.org/wiki/Operadorhttp://es.wikipedia.org/wiki/Operandohttp://es.wikipedia.org/wiki/Aridadhttp://es.wikipedia.org/w/index.php?title=Signos_de_agrupaci%C3%B3n&action=edit&redlink=1http://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/L%C3%B3gica_proposicionalhttp://es.wikipedia.org/wiki/Archivo:Prefix-dia.pnghttp://es.wikipedia.org/wiki/L%C3%B3gica_proposicionalhttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/w/index.php?title=Signos_de_agrupaci%C3%B3n&action=edit&redlink=1http://es.wikipedia.org/wiki/Aridadhttp://es.wikipedia.org/wiki/Operandohttp://es.wikipedia.org/wiki/Operadorhttp://es.wikipedia.org/wiki/%C3%81lgebrahttp://es.wikipedia.org/wiki/Aritm%C3%A9ticahttp://es.wikipedia.org/wiki/L%C3%B3gica
  • 7/31/2019 49289218 Antologia de Pro Todo

    27/44

    PROGRAMACION DE SISTEMAS

    27

    Cuando se utilizan triples se ocupan punteros a la misma estructura de lostriples.* b t1 t2 //cudruplos* b (0) //triple

    6.3.4 Cudruplos

    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 yresultado son valores de tipo puntero yapuntan a una entrada en la tabla desmbolos.

    6.4 Esquemas de generacin

    Los esquemas de generacin son las estrategias o acciones que se debernrealizarse y tomarse en cuenta en el momento de generar cdigo intermedio.Los esquemas de generacin dependen de cada lenguaje. Tomaremosalgunosesquemas de generacin del lenguaje C.

    6.4.1 Expresiones

    Para generar expresiones estas debenrepresentarse de manera ms simple ymsliteral para que su conversin sea ms rpida.Por ejemplo la traduccin de operaciones aritmticas debe especificarse unapor una,de tal forma que una expresin sea lo ms mnimo posible.

    6.4.2 Declaracin de variables,constantes

    Las declaraciones de variables y constantes deben separarse de tal maneraque quedenlas expresiones una por una de manera simple. Por ejemplointa,b,c; se descompone a int a;int b; intc; respectivamente.

    6.4.3 Estatuto de asignacin

    Las operaciones de asignacin deben quedar expresadas por unaexpresinsencilla, si est es compleja se debe reducir hasta quedar unoperador sencillo.

    Por ejemplo: x = a+b/5; debe quedar de laforma y = b/5; z = a+y; x=z.

  • 7/31/2019 49289218 Antologia de Pro Todo

    28/44

    PROGRAMACION DE SISTEMAS

    28

    6.4.4 Estatuto condicional

    Las condiciones deben expresarse de manera lo ms sencilla posible de tal

    forma que puedan evaluarse en cortocircuito. Porejemplo 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 comoswitch se reducen a una versincomplejasde ifs.

    6.4.5 Estatuto de ciclos

    Los ciclos se descomponen en un ciclo genrico, por lo que ciclos while, for ydowhiletienen la misma representacin interna.En el caso de C, todo queda enforma dewhile.Las condiciones lgicas tambin pueden ser evaluadas encortocircuito y reducidas.

    6.4.6 Arreglos

    Los arreglos se descomponen en estructurasbsicas de manejo de manerasimple, as porejemplo: 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, loque se hace es expander el cdigooriginalde la funcin.

    Las funciones se descomponen simplificando los parmetros de maneraindividual al igualque el valor de retorno.

  • 7/31/2019 49289218 Antologia de Pro Todo

    29/44

    PROGRAMACION DE SISTEMAS

    29

    7. Optimizacin

    7.1. Tipos de Optimizacin

    7.1.1. Locales

    Se realiza despus de la generacin de cdigo de todo el programa o de unelemento ejecutable del programa (funcin, procedimiento, etc).Dependiente del contexto

    Objetivo

    Obtener cdigo que se ejecuta ms eficientemente segn los criterios

    Tiempo de ejecucin (optimizacin temporal)

    Espacio de memoria utilizado (optimizacin espacial)

    Funcionamiento

    Revisa el cdigo generado a varios niveles de abstraccin y realiza lasoptimizaciones aplicables al nivel de abstraccin

    Representaciones de cdigo intermedio de ms a menos abstractasrbol sintctico abstracto: optimizar subexpresiones redundantes, reduccin

    de frecuencia, etc. Tuplas o cuadruplas: optimizar en uso de los registros o delas variables temporales.

    Ensamblador/Cdigo mquina: convertir saltos a saltos cortos, reordenarinstrucciones

    Las optimizaciones locales se realizan sobre el bloque bsico

    Optimizaciones localesFoldingPropagacin de constantesReduccin de potenciaReduccin de subexpresiones comunes

  • 7/31/2019 49289218 Antologia de Pro Todo

    30/44

    PROGRAMACION DE SISTEMAS

    30

    Un bloque bsico es un fragmento de cdigo que tiene una nica entrada ysalida, y cuyas instrucciones se ejecutan secuencialmente.

    Implicaciones:Si se ejecuta una instruccin del bloque se ejecutan todas en un orden

    conocido en tiempo de compilacin.

    La idea del bloque bsico es encontrar partes del programa cuyo anlisisnecesario para la optimizacin sea lo ms simple posible.

    7.1.2. Globales

    Grafo del flujo de ejecucinAntes de realizar una optimizacin global es necesario crear el grafo de flujode ejecucin.El grafo de flujo de ejecucin representa todos los caminos posibles de

    ejecucin del programa.La informacin contenida en el grafo es til para

    el programador y el optimizador

    La optimizacin global a partir del anlisis del grafo del flujo de ejecucinpermite Una propagacin de constantes fuera del bloque bsico. Problema: la

    optimizacin global es muy costosa en tiempo de compilacin

    Construccin del Grafo del Flujo de Ejecucin

    Tipos de grafoOrientado a procedimiento/funcinGrafo de llamadas

    Ejemplo

    int fact(int n) {int r;r=1;i=1;while (i

  • 7/31/2019 49289218 Antologia de Pro Todo

    31/44

    PROGRAMACION DE SISTEMAS

    31

    7.1.3 Bucles

    Los ciclos son una de las partes ms esenciales en el rendimiento de unprograma

    dado que realizan acciones repetitivas, y si dichas acciones estn malrealizadas, el problema se hace N veces ms grandes.La mayora de las optimizaciones sobre ciclos tratan de encontrar elementosque no deben repetirse en un ciclo.

    Ciclos

    while(a == b){int c = a;c = 5; ;

    }

    En este caso es mejor pasar el int c =a; fuera del ciclo de ser posible.

    El problema de la optimizacin en ciclos y en general radica es que muy difcilsaber el uso exacto de algunas instrucciones. As que no todo cdigo deproceso puede ser optimizado.

    Otros uso de la optimizacin pueden ser el mejoramiento de consultas en SQLo en aplicaciones remotas (sockets, E/S, etc.)

    7.1.4 De mirilla

    La optimizacin de mirilla trata de estructurar de manera eficiente el flujo delprograma, sobre todo en instrucciones de bifurcacin como son las decisiones,ciclos y saltos de rutinas.

    La idea es tener los saltos lo ms cerca de las llamadas, siendo el salto lo mspequeo posible

    7.2. Costos

    7.2.1. Maquinas Virtuales

    Las MV se construyeron para simplificar el proceso del control del hardware deun ordenador porque extienden y enmascaran la funcionalidad del hardware atravs de procedimientos y datos abstractos. Se pueden identificar dos tipos deMV concretas: las que juegan un papel en la preparacin de un programa parasu ejecucin (tiempo de compilacin) y las que permiten la ejecucin de dichoprogramaLas MV suelen aparecer en una jerarqua (como se ver acontinuacion ).Usamos la jerarqua de MV de compilacin, por ejemplo, cada vez que

  • 7/31/2019 49289218 Antologia de Pro Todo

    32/44

    PROGRAMACION DE SISTEMAS

    32

    invocamos el compilador de C++. Y dos ejemplos muy comunes del papel deuna MV en la jerarqua de MV de ejecucin son PostScript (que define una MVpara una impresora) y MSDOS bajo MS Windows (que define una MV quepermite que antiguos programas de DOS funcionen bajo Windows). PostScriptes una MV que incluye el estado grfico, la ruta actual, el estado del diccionario

    y, aunque sea bastante complejo, presenta una visin de alto nivel de muchostipos distintos de impresoras, aislando las caractersticas de las impresoras delas aplicaciones que las usan.

    Jerarquas de mquinas virtuales

    La realidad es que el desarrollador de un lenguaje suele implementar las MV(de compilacin y/o ejecucin) de su lenguaje en trminos de otras MV yaexistentes. Y en el futuro, un programador de aplicaciones utilizar las MV

    implementadas por el desarrollador del lenguaje para producir programas que asu vez puedan servir como MV para otras aplicaciones, etc. La conclusin,como puede verse, es que una MV no suele existir aislada, sino como parte deuna jerarqua de MV. A continuacin se va a ver el papel de las jerarquas deMV en el tiempo de compilacin y de ejecucin.En primer lugar, se va a considerar el papel de la jerarqua de MV en el tiempode compilacin. En el caso de C++, como lenguaje de alto nivel que se compilaa un lenguaje tan cerca del nivel de mquina como sea posible, se puede verque el proceso de compilacin de un programa de C++ consiste en lainteraccin de la jerarqua de MV (aunque puede haber diferencias entrecompiladores de C++; por ejemplo, aqu se supone que es un proceso decompilacin que usa C como cdigo intermedio). El pre-procesador acepta elcdigo C++ como fuente y produce otra versin del mismo cdigo C++ conalgunas extensiones e incorporaciones resueltas. El traductor convierte elcdigo fuente C++ estndar a cdigo fuente C. El compilador C acepta estecdigo como fuente y lo traduce a cdigo ensamblador (una representacinsimblica del cdigo mquina). El ensamblador traduce este cdigo simblico aun cdigo mquina reubicable. Y por fin, el cargador de libreras acepta estecdigo mquina como entrada y produce un programa simple ejecutable,compuesto por el cdigo mquina de entrada y todos los subprogramasnecesarios con direcciones de memoria contiguas. Adems del proceso de

    compilacin, la traduccin completa de los programas de alto nivel (previa a suejecucin) en una forma que corre sobre la mquina, tambin existe otroproceso, que se llama interpretacin, que tiene ms que ver con el papel de lasMV en el tiempo de ejecucin que en el tiempo de compilacin.

  • 7/31/2019 49289218 Antologia de Pro Todo

    33/44

    PROGRAMACION DE SISTEMAS

    33

    7.2.2. Criterios de Mejoramiento

    La mejor manera de optimizar el cdigo es hacer ver a los programadores queoptimicen su cdigo desde el inicio, el problema radica en que el costo podraser muy grande ya que tendra que codificar mas y/o hacer su cdigo maslegible.

    Los criterios de optimizacin siempre estn definidos por el copilador

    Muchos de estos criterios pueden modificarse con directivas del compiladordesde el cdigo o de manera externa.

    Este proceso lo realizan algunas herramientasdel sistema como losofuscadores para cdigo mvil y codifo para dispositivos mviles

    7.2.3 herramientas para el anlisis del flujo de datos

    Existen algunas herramientas que permiten el anlisis de los flujos de datos,entre ellas tenemos los depuradores y desambladores.

    La optimizacin al igual que la programacin es un arte y no se ha podidosistematizar del todo.

  • 7/31/2019 49289218 Antologia de Pro Todo

    34/44

    PROGRAMACION DE SISTEMAS

    34

    8. Generacin de cdigo objeto.

    8.1 Lenguaje mquina.

    Se denomina lenguaje mquina a la serie de datos que la parte fsica de lacomputadora o hardware, es capaz de interpretar.

    Una computadora digital o, mejor dicho, su parte fsica, slo distingue datos detipo binario, es decir, constituidos por dos nicos valores a los que se denomina

    valor 0 y valor 1 y que, fsicamente, se materializan con tensionescomprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Pararepresentar datos que contengan una informacin se utilizan una serie de unosy ceros cuyo conjunto indica dicha informacin.

    La informacin que hace que el hardware de la computadora realice unadeterminada actividad de llama instruccin. Por consiguiente una instruccin esun conjunto de unos y ceros. Las instrucciones as formadas equivalen aacciones elementales de la mquina, por lo que al conjunto de dichasinstrucciones que son interpretadas directamente por la mquina sedenomina lenguaje mquina.

  • 7/31/2019 49289218 Antologia de Pro Todo

    35/44

    PROGRAMACION DE SISTEMAS

    35

    El lenguaje mquina fue el primero que empleo el hombre para la programacinde las primeras computadoras. Una instruccin en lenguaje mquina puederepresentarse de la siguiente forma:011011001010010011110110.

    Esta secuencia es fcilmente ejecutada por la computadora, pero es de difcilinterpretacin, siendo aun mas difcil la interpretacin de un programa (conjuntode instrucciones) escrito de esta forma. Esta dificultad hace que los erroressean frecuentes y la correccin de los mismos costosa, cuando no imposible, aligual que la verificacin y modificacin de los programas.

    La anterior secuencia de dgitos binarios (bits) puede indicar a la computadoraque:

    Si lo vemos escrito de esta forma, lo entenderemos fcilmente, ya que est ennuestro lenguaje natural, pero la mquina elemental ser incapaz de entendernada. Vemos, pues, que la forma de indicar a la mquina lo que debe hacer estotalmente diferente de la indicar a un ser humano lo mismo, por lo que debenemplearse sistemas de traduccin de una forma a otra.

    Ya se ha dicho que en un principio el programador empleaba directamente ellenguaje mquina. En este caso el traductor era el programador; pero vimostambin los problemas que esto causaba.

    Con la prctica en el manejo de la mquina se cay en la cuenta de que sepodra utilizar la propia mquina para ayudar en la traduccin de estosprogramas. Es decir, que si a una mquina elemental se le dotaba de unprograma, tambin elemental, que tradujera un nmero determinado decaracteres de caracteres alfabticos en una secuencia de unos y ceros, sepodra escribir un programa constituido por una secuencia de grupos decaracteres alfabticos, en la que cada uno de los grupos indicara una accin arealizar por el ordenador y, una vez escrito el programa, sera la propiamquina la que pasara los grupos de caracteres a bits.

    Las ventajas de esto son evidentes, ya que para el hombre resulta mas fcil

    manipular grupos de caracteres y la traduccin se hara de manera automtica.Por ejemplo, se podra escribir:

    TRASLADAR 11010110, 00011101.

    Esto indicara que el contenido de la posicin 11010110 haba que pasarlo a laposicin 00011101 si se sabe que al grupo alfabtico TRASLADAR lecorresponde la secuencia de bits 11110101. La mquina traducira la anteriorinstruccin como:

    11110101 11010110 00011101

  • 7/31/2019 49289218 Antologia de Pro Todo

    36/44

    PROGRAMACION DE SISTEMAS

    36

    Al grupo alfabtico se le denomina mnemotcnico, y existir un mnemotcnicopor cada instruccin. Se le da este nombre porque sirve para recordar conmayor facilidad el conjunto de instrucciones de una determinada mquina.De esta forma aparecieron los lenguajes ensambladores (Assembler, eningls). Poco a poco, con el avance de la programacin (Software), estas

    primeras y sencillas ayudas se fueron haciendo ms complejas, permitiendoque, adems de los mnemotcnicos correspondientes a la operacin a realizar,se pudieran emplear otros para indicar, por ejemplo, los operandos. La anteriorinstruccin se podra escribir de la siguiente forma:

    TRASLADAR POS-A POS-B

    Que nos resulta de ms fcil comprensin.

    Tambin se introdujo la posibilidad de indicar a la computadora la direccin deun salto en la secuencia de ejecucin de un programa mediante la utilizacin

    de etiquetas.

    A los programas que permiten pasar del programa escrito de esta manera(programa fuente, en ensamblador) al lenguaje mquina tambin se lesdenomina normalmente ensambladores. Estos traductores, como ya se hadicho, se fueron complicando cada vez ms para que la labor del programadorfuera ms fcil, incluyendo los denominados directivos del ensamblador, queson rdenes o informaciones que el programador da al traductor, noinstrucciones de lenguaje mquina.

    Aun con todas estas sofisticaciones y ayudas, el programador de lenguajeensamblador debe conocer perfectamente el sistema fsico (Hardware) de lamquina con que trabaja, pues aunque emplee mnemotcnicos, etiquetas, etc.,stas sirven para indicar una posicin de memoria determinada, un registro ocualquier otra parte de la mquina.

    Por eso se dice que el lenguaje ensamblador es un lenguaje de bajo nivel, esdecir, ligado con el concreto de una determinada mquina. Aquradica la diferencia importante con los lenguajes ms complejos, llamados dealto nivel, como el Basic, Pascal, Cobol, etc., ya que en stos el programadorno tiene porque reconocer el de la mquina. Trabaja con variables,

    constantes e instrucciones simblicas, y es el traductor quien las transforma enlas direcciones apropiadas.

    8.1.1 Caractersticas

    El lenguaje mquina realiza un conjunto de operaciones predeterminadasllamadas micro operaciones.

    Las micro operaciones slo realizan operaciones del tipo aritmtica (+,-,*, /),lgicas (AND, OR, NOT) y de control (secuencial, decisin, repetitiva)

    Caractersticas

  • 7/31/2019 49289218 Antologia de Pro Todo

    37/44

    PROGRAMACION DE SISTEMAS

    37

    El lenguaje mquina es dependiente del tipo de arquitectura. As un programamquina para una arquitectura intel x86 no se ejecutar en una arquitecturaPower PC de IBM (al menos de manera nativa).

    Algunos microprocesadores implementan ms funcionalidades llamado CISC,

    pero son ms lentos que los RISC ya que estos tienen registros ms grandes.

    8.1.2 Direccionamiento

    Es la forma en cmo se accede a la memoria. Recordar que un programa nopuede ejecutarse sino se encuentra en memoria principal.

    La forma de acceder a la memoria depende del microprocesador, pero engeneral existen dos tipos de direccionamiento: directo e indirecto.

    Direccionamiento

    El direccionamiento directo tambin recibe el nombre de direccionamientoabsoluto y el acceso a las direcciones se hace de manera directa.

    El direccionamiento indirecto tambin recibe el nombre de direccionamientorelativo y se basa a partir de una direccin genrica, generalmente el inicio delprograma.

    Direccionamiento

    Para acceder a una direccin relativa se suma a ladireccin base el nmerode espacios de memorias necesarias.

    El direccionamiento relativo hace a los programas relocalizables eindependientes.

    Si la direccin base es el inicio de la memoria fi direccionamiento pasa a ser

    un variante de direccionamiento absoluto

  • 7/31/2019 49289218 Antologia de Pro Todo

    38/44

    PROGRAMACION DE SISTEMAS

    38

    8.2 Lenguaje ensamblador

    El lenguaje ensamblador, o assembler(assembly language en ingls ) es un lenguajede programacin de bajo nivel para los

    computadores, microprocesadores,microcontroladores, y otros circuitos integradosprogramables. Implementa una representacinsimblica de los cdigos de mquina binarios yotras constantes necesarias para programar unaarquitectura dada de CPU y constituye larepresentacin ms directa del cdigo mquinaespecfico para cada arquitectura legible por unprogramador. Esta representacin es usualmente definida por el fabricante dehardware, y est basada en los mnemnicos que simbolizan los pasos deprocesamiento (las instrucciones), los registros del procesador, las posicionesde memoria, y otras caractersticas del lenguaje. Un lenguaje ensamblador espor lo tanto especfico a cierta arquitectura de computador fsica (o virtual).Esto est en contraste con la mayora de los lenguajes de programacin de altonivel, que, idealmente son portables.

    Un programa utilitario llamado ensamblador es usado para traducir sentenciasdel lenguaje ensamblador al cdigo de mquina del computador objetivo. Elensamblador realiza una traduccin ms o menos isomorfa (un mapeo de unoa uno) desde las sentencias mnemnicas a las instrucciones y datos demquina. Esto est en contraste con los lenguajes de alto nivel, en los cualesuna sola declaracin generalmente da lugar a muchas instrucciones demquina.

    Muchos sofisticados ensambladores ofrecen mecanismos adicionales parafacilitar el desarrollo del programa, controlar el proceso de ensamblaje, y laayuda de depuracin. Particularmente, la mayora de los ensambladoresmodernos incluyen una facilidad de macro (descrita ms abajo), y son llamadosmacro ensambladores.

    Fue usado principalmente en los inicios del desarrollo de software, cuando anno se contaba con potentes lenguajes de alto nivel y los recursos eran

    limitados.Muchos dispositivos programables (como los microcontroladores) aun cuentancon el ensamblador como la nica manera de ser manipulados.

    8.2.1 Caractersticas

    El cdigo escrito en lenguaje ensamblador posee una cierta dificultad deser entendido ya que su estructura se acerca al lenguaje mquina, es

    decir, es un lenguaje de bajo nivel.

  • 7/31/2019 49289218 Antologia de Pro Todo

    39/44

    PROGRAMACION DE SISTEMAS

    39

    El lenguaje ensamblador es difcilmente portable, es decir, un cdigoescrito para un microprocesador, puede necesitar ser modificado, parapoder ser usado en otra mquina distinta. Al cambiar a una mquina conarquitectura diferente, generalmente es necesario reescribirlocompletamente.

    Los programas hechos, por un programador experto, en lenguajeensamblador, son generalmente mucho ms rpidos y consumen menosrecursos del sistema (memoria RAM y ROM) que el programaequivalente compilado desde un lenguaje de alto nivel. Al programarcuidadosamente en lenguaje ensamblador se pueden crear programasque se ejecutan ms rpidamente y ocupan menos espacio que conlenguajes de alto nivel.Con el lenguaje ensamblador se tiene un control muy preciso de lastareas realizadas por un microprocesador por lo que se pueden crearsegmentos de cdigo difciles y/o muy ineficientes de programar en unlenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje

    ensamblador se dispone de instrucciones del CPU que generalmente noestn disponibles en los lenguajes de alto nivel.Tambin se puede controlar el tiempo en que tarda una rutina enejecutarse, e impedir que se interrumpa durante su ejecucin.

    8.2.2 Almacenamiento

    Una de las principales ventajas del uso del ensamblador, es que se encarga deadministrar de manera transparente para el usuario la creacin de memoria, lasbifurcaciones y el paso de parmetros.

    Adems nos permite acceder directamente a los recursos de la mquina paraun mejor desempeo.

    8.3 Registros

    Los registros del procesador se emplean para controlar instrucciones enejecucin, manejar direccionamiento de memoria y proporcionar capacidadaritmtica. Los registros son espacios fsicos dentro del microprocesador concapacidad de 4 bits hasta 64 bits dependiendo del microprocesador que seemplee. Los registros son direccionables por medio de una vieta, que es unadireccin de memoria. Los bits, por conveniencia, se numeran de derecha aizquierda (15, 14, 13. 3, 2, 1, 0), los registros estn divididos en seis gruposlos cuales tienen un fin especfico. Los registros se dividen en:

    Registros de segmento

  • 7/31/2019 49289218 Antologia de Pro Todo

    40/44

    PROGRAMACION DE SISTEMAS

    40

    Registros de apuntadores de instrucciones Registros apuntadores Registros de propsitos generales Registro ndice Registro de bandera.

    Registros de uso general

    AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).- Interviene enlas operaciones aritmticas y lgicas, despus de la operacin arroja unresultado.

    BX = Registro base, dividido en BH y BL.- Se utiliza en transferencias de datosentre la memoria y el procesador.

    CX = Registro contador, dividido en CH y CL.- Se utiliza como contador enbucles(LOOP), en operaciones con cadenas(REP), y en desplazamientos(CL).

    DX = Registro de datos, dividido en DH y DL.- Se utiliza en operaciones demultiplicacin y divisin junto con Ax y en operaciones de entrada y salida depuertos, su mitad inferior DL contiene el nmero de puertos.

    Registros de segmento.

    Un registro de segmento se utiliza para alinear en un limite de prrafo o dichode otra forma codifica la direccin de inicio de cada segmento y su direccin enun registro de segmento supone cuatro bits 0 a su derecha.

    Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoriapara direccionamientos conocidos como el segmento actual. Los registros desegmento son: CS (cdigo), DS (datos), SS (pila), ES , FS y GS.

    Registro Apuntador de instrucciones.(IP)

    El registro apuntador de instrucciones (IP) de 16 bits contiene el

    desplazamiento de direccin de la siguiente instruccin que se ejecuta.Registro ndice.

    Los registros SI y DI estn disponibles para direccionamientos indexados ypara sumas y restas. Que son las operaciones de punta.

  • 7/31/2019 49289218 Antologia de Pro Todo

    41/44

    PROGRAMACION DE SISTEMAS

    41

    Registro de bandera.

    Los registros de banderas sirven parar indicar el estado actual de la maquina yel resultado del procesamiento, Cuando algunas instrucciones pidencomparaciones o clculos aritmticos cambian el estado de las banderas.

    8.3.1 Distribucin

    La distribucin es el proceso en el que el programa generado puede ejecutarseen otras mquinas.

    Con respecto al ensamblador, la mayora del direccionamiento se hace relativopara que el programa sea relocalizable por un programa llamado cargador.

    En el caso de programas compilados se necesitan de las libreras, si sonestticas se incluyen en el ejecutable por lo que el programa se hace grfico, sison dinmicas no pero el programa es ms pequeo.

    Debido a la complejidad del software actual se necesitan de asistentes para

    poder instalar y ejecutar un programa.

    8.3.2 Asignacin

    La asignacin de valores a variables se hace a travs de un proceso de mover

    el contenido de memoria a registro, o de registro a memoria, pero nunca dememoria a memoria.

    Cuando se trata de memoria dinmica se debe seguir el rastro de los datos.

  • 7/31/2019 49289218 Antologia de Pro Todo

    42/44

    PROGRAMACION DE SISTEMAS

    42

    8.4 Administracin de memoria

    La administracin de memoria serefiere a los distintos mtodos yoperaciones que se encargan deobtener la mxima utilidad de lamemoria, organizando losprocesos y programas que se

    ejecutan de manera tal que seaproveche de la mejor maneraposible el espacio disponible.

    Para poder lograrlo, la operacinprincipal que realiza es la detrasladar la informacin que deberser ejecutada por el procesador, ala memoria principal. Actualmenteesta administracin se conoce como Memoria Virtual ya que no es la memoriafsica del procesador sino una memoria virtual que la representa. Entre algunas

    ventajas, esta memoria permite que el sistema cuente con una memoria msextensa teniendo la misma memoria real, con lo que esta se puede utilizar demanera ms eficiente. Y por supuesto, que los programas que son utilizados noocupen lugar innecesario.

    Entre las principales operaciones que desarrolla la administracin de memoriase encuentran la reubicacin, que consiste en trasladar procesos activos dentroy fuera e la memoria principal para maximizar la utilizacin del procesador; laproteccin, mecanismos que protegen los procesos que se ejecutan deinterferencias de otros procesos; uso compartido de cdigos y datos, con lo queel mecanismo de proteccin permite que ciertos procesos de un mismo

    programa que comparten una tarea tengan memoria en comn.

  • 7/31/2019 49289218 Antologia de Pro Todo

    43/44

    PROGRAMACION DE SISTEMAS

    43

    Bibliografa

    (s.f.). Recuperado el LUNES de DICIEMBRE de 2010, dehttp://arantxa.ii.uam.es/alfonsec/docs/compila5.html

    (s.f.). Recuperado el LUNES de DICIEMBRE de 2010, dehttp://serdis.dis.ulpgc.es/~a013775/asignaturas/itis-ti2/TI2/Apuntes%20del%20curso%202004-2005/An_lisis_sem_ntico-by_Ermis.pdf

    (s.f.). Recuperado el MARTES de DICIEMBRE de 2010, de

    http://es.wikipedia.org/wiki/Conversi%C3%B3n_de_tipos

    (s.f.). Recuperado el MARTES de DICIEMBRE de 2010, dehttp://es.wikipedia.org/wiki/Lenguaje_ensamblador

    (s.f.). Recuperado el MARTES de DICIEMBRE de 2010, dehttp://www.mastermagazine.info/termino/3780.php

    (s.f.). Recuperado el MIERCOLES de DICIEMBRE de 2010, dehttp://www.unse-prog2.comxa.com/downloads/Sesion-10.pdf

    (s.f.). Recuperado el MIERCOLES de DICIEMBRE de 2010, dehttp://www.mitecnologico.com/Main/RegistrosLenguajeEnsamblador

    (s.f.). Recuperado el JUEVES de DICIEMBRE de 2010, dehttp://148.202.148.5/cursos/cc206/programaciondesistemas_1_3.html

  • 7/31/2019 49289218 Antologia de Pro Todo

    44/44

    PROGRAMACION DE SISTEMAS