Lenguajes y Autómatas II Unidad 3. Análisis semántico

Embed Size (px)

DESCRIPTION

Actividades de aprendizaje

Citation preview

Educacin Tecnolgica con Compromiso Social

INSTITUTO NACIONAL DE MXICOINSTITUTO TECNOLGICO DE ACAPULCO

Carrera:Ingeniera en Sistemas Computacionales

Asignatura:Lenguajes y Autmatas II

Unidad 3. Anlisis semntico

Competencia especfica de la unidadConocer e Identificar los diferentes tipos de optimizacin que permita eficientar el cdigo intermedio

Profesor: Silvestre Bedolla Solano

Integrantes del Equipo 1

Nombre Numero de control

Vzquez Vzquez Jess 12320040

Hernndez Escalante Carlos Eduardo12320752

Miranda Guerra Vctor Manuel 12320023

Caballero Carbajal Jess 12320005

Barrera Sandoval Luis Jaime12320677

Toribio Candela Maricarmen11320672

Acapulco, Guerrero Octubre 2015

ndice

Introduccin3Actividad 1. Reporte de las tcnicas aplicadas para la optimizacin del cdigo intermedio generado (10%).4Actividad 2. Lista de los recursos se consumen en invocacin a funciones y expresiones simples (10%).5Actividad 3. Ensayo que establezca las tendencias y tcnicas empleadas en lenguajes que requieren de una mquina virtual para su ejecucin sobre multiplataforma (20%).12Actividad 4. Cuadro sinptico de los criterios de tiempo de ejecucin o extensin de cdigo generado (20%).13Actividad 5. Reporte del avance por equipo del proyecto final consistente en desarrollar software de base: traductor, intrprete o compilador (20%).14Conclusin15Bibliografas16

Introduccin

En la actualidad los ordenadores estn invadiendo todos los campos del conocimiento. Una gran variedad de programas se desarrollan para diversas aplicaciones de todo tipo. Al usuario, al final de un programa solo le interesan dos cosas: que el programa sea fcil de manejar y que su ejecucin sea lo ms rpido posible.Para mejorar el este ltimo aspecto cada da se tienen ms en cuenta las optimizaciones en el cdigo del programa. Idealmente los compiladores deberan producir cdigo objeto que fuera tan bueno como si estuviera escrito directamente por un buen programador. La realidad es que esto es difcil de conseguir y muy pocas veces se alcanza esa meta. Sin embargo, el cdigo generado por el compilador puede ser mejorado por medio de una transformaciones que se han denominado tradicionalmente optimizaciones, aunque el termino optimizacin es impropio ya que raramente se consigue que el cdigo generado sea el mejor posible.El objetivo de las tcnicas de optimizacin es mejorar el programa objeto para que nos d un rendimiento mayor. La mayora de estas tcnicas vienen a compensar ciertas ineficiencias que aparecen en el lenguaje fuente, ineficiencias que son inherentes al concepto de lenguaje de alto nivel, el cual suprime detalles de la maquina objeto para facilitar la tarea de implementar un algoritmo.Las distintas tcnicas de optimizacin se pueden clasificar o dividir de diversas formas.

Actividad 1. Reporte de las tcnicas aplicadas para la optimizacin del cdigo intermedio generado (10%).

En general el cdigo intermedio generado por un compilador suele ser bastante ineficiente. Basta observar el cdigo generado para la evaluacin de una expresin para darse cuenta de este hecho. Cdigo fuente -> a:= x^2 + y Cdigo intermedio -> t1:= 2 t2 := x^t1 t3 := t2 + y a := t3 Cdigo mejorado -> t1:= x * x a := t1 + yCriterios para optimizar: Menor tiempo de ejecucin Menor tamao del programa Estos dos criterios son a menudo contradictorios y requieren algoritmos de generacin de cdigo distintos. Sera ms correcto hablar de mejora del cdigo, puesto que en general no existen algoritmos que nos permitan obtener el programa equivalente ms pequeo, o ms rpido, y por lo tanto no podremos decir que estamos obteniendo el cdigo ptimo. Por ejemplo, podramos plantearnos un optimizador de talla del cdigo. Bajo este supuesto el cdigo ptimo para cualquier programa que no pare sera: 1: GOTO 1 En consecuencia un optimizador de talla de cdigo traducira cualquier programa que no parase en un programa objeto de una nica instruccin como la indicada. Ahora la existencia del optimizador sera equivalente a determinar si un programa parara o no, pero esta ltima cuestin es indecidible por lo tanto no es posible encontrar tal optimizador. La mayora de algoritmos de mejora se pueden ver como la aplicacin de varias transformaciones sobre la representacin intermedia del cdigo.Fuentes de optimizacin Programa fuente. Optimizaciones cuyos efectos podran obtenerse con una implementacin ms apropiada del programa fuente. El programador puede: perfilar el programa, cambiar el algoritmo, mejorar buclespor ejemplo podra substituir if TRUE then A else B por A Cdigo intermedio. Hay mejoras que no son posibles en el programa fuente, Ej. El cdigo generado para acceder a los elementos de una matriz dentro de un bucle, calcular varias veces la misma funcin de acceso. Ejemplos de estas transformaciones son: Subexpresiones comunes Transformaciones algebraicas. Copias de variables Cdigo inactivo Bucles Cdigo objeto. En este nivel el uso adecuado de los registros, as como de las instrucciones propias de la mquina destino pueden suponer beneficios importantes respecto de la eficiencia del programa objeto. Ej. Aprovechar una instruccin de la mquina destino que ya proporciona una suma y un salto condicional en funcin del resultado. Ejemplo: Cdigo fuente -> var a: array [1..10, 1..20] of integer; {talla de un entero 2 u.m.} while a[i, k] < M do k := k 1; Cdigo intermedio: -> 100 t1:= i * 20 101 t2 := t1 + k 102 t3 := t2 * 2 103 t4 := a[t3] 104 if t4< M goto 106 105 goto 108 106 k := k 1 107 goto 100 108

Cdigo mejorado: -> 100 t1:= i * 20 101 t2 := t1 + k 102 t3 := t2 * 2 103 t4 := a[t3] 104 if t4 ! M goto 107 105 t3 := t3 - 2 106 goto 103 107 En este ejemplo se observa, sin entrar en detalles de cmo se ha realizado la mejora, que las instrucciones 100, 101 y 102 slo se calculan una vez en vez de una cada iteracin del bucle. Esta mejora no se puede realizar sobre el programa fuente, puesto que la parte optimizada corresponde a la funcin de acceso a los elementos de una matriz. Clasificacin de las optimizaciones: Local: si puede realizarse observando nicamente una parte del programa que se ejecuta secuencialmente sin saltos (bloque bsico). Global: Para realizarlas se necesita conocer el flujo de control entre las distintas partes del programa. Hay varios tipos de optimizacin, siendo los ms usuales los siguientes:

1. Eliminacin de instrucciones redundantes. 2. Optimizaciones en el flujo de control. 3. Simplificaciones algebraicas. 4. Uso de instrucciones mquina especficas.

Para la resolucin de estas ecuaciones, hay que tener en cuenta lo siguiente:

{inicializaciones} for cada bloque B do begin IN[B] := 0; OUT[B] := GEN[B] end; {cuerpo del algoritmo} cambio := true; while cambio do begin cambio := false; for cada bloque B do begin IN[B] := OUT[P]; P es un predecesor de B oldout := OUT[B]; OUT[B] := (IN[B] - KILL[B]) U GEN[B]; if OUT[B] oldout then cambio := true endend

Hay lenguajes que son pseudo interpretados que utilizan un cdigo intermedio llamado cdigo-P que utiliza lo que se denomina bytecodes (sentencias de un P hipottico). Por ejemploJava utiliza los ficheros .class, stos tienen unos bytecodes que se someten a una JavaVirtualMachine, para que intrprete esas sentencias.En este captulo se muestra cmo se pueden utilizar los mtodos de analizadores dirigidos por la sintaxis para traducir a un cdigo intermedio, construcciones de lenguajes de programacin como declaraciones, asignaciones y proposiciones de flujo de control. La generacin de cdigo intermedio se puede intercalar en el anlisis sintctico.

Actividad 2. Lista de los recursos se consumen en invocacin a funciones y expresiones simples (10%).

Expresiones regularesLas expresiones regulares permiten describir estructuras sintcticas, en particular las de los lenguajes regulares. Son, por tanto, patrones sintcticos a los que deben ajustarse los elementos que componen el vocabulario del lenguaje. Dicho de una manera ms sencilla, las expresiones regulares son patrones que permiten reconocer secuencias de smbolos con una estructura sintctica determinada.Hay diversas notaciones para representar expresiones regulares. Por ejemplo, la notacin BNF y otras derivadas de ella. Los comodines (wildcards) usados para designar conjuntos de ficheros vienen a ser una forma restringida de rexpresiones regulares. La notacin que se describe aqu permite escribir patrones para secuencias de caracteres (strings), y corresponde a la que con ligeras variantes se usa en diversas utilidades para proceso de textos: "grep", "awk", "perl", la librera "regexp", etc. Los apartados siguientes describen los elementos principales. Para una descripcin ms completa se debe consultar el manual de referencia correspondiente.

Expresiones simples

Son patrones que se ajustan a un nico smbolo (en general, a un nico carcter):

ExpresinSignificado

Xcarcterx, si es carcter normal

.cualquier carcter

[aeiou]un carcter del conjunto

[a-z]un carcter del rango

[^aeiou0-9]complementa el conjunto

\xcarcterx, sixes un carcter especial

^principio del texto, si va al comienzo

$fin del texto, si va al final

\fin de palabra (*)

(*)Patrn no estndar

Expresiones compuestasSon patrones que combinan expresiones simples. Se ajustan a una secuencia de smbolos.ExpresinSignificado

Xyexpresinxseguida dey

x+una o ms repeticiones dex

x*cero o ms repeticiones dex

x?cero o una aparicin dex

una|otrauna u otra expresin

(x)expresinx

Ejemplos de expresiones regularesUn dgito numrico, decimal:[0-9]Una vocal:[AEIOUaeiou]Una letra, mayscula o minscula:[A-Za-z]Una palabra que empieza por letra y puede contener nmeros:[A-Za-z][A-Za-z0-9]*Un nmero, con punto decimal, al comienzo del texto:^[+\-0-9][0-9]*\.[0-9]*Abreviatura del nombre de un mes:(Ene|Feb|Mar|Abr|May|Jun|Jul|Ago|Sep|Oct|Nov|Dic)Herramienta Grep

La interpretacin de cdigo intermedio permite realizar la funcin final del intrprete, la ejecucin del programa. Para ello se tiene la tabla de cdigo y la tabla de clases, productos finales de la fase de anlisis (y de algunas de sntesis), que debern interpretarse siguiendo las definiciones de las operaciones de cdigo intermedio.Segn [MAM2006], esta optimizacin se encarga de realizar la ejecucin de diversas operaciones aritmticas (+, -, * y /) y conversiones de tipo en el momento de la compilacin. Al realizarse la ejecucin es necesario guardar el resultado en una subtabla T con pares (ID, VALOR). El algoritmo se describe a continuacin (vase en el anexo 18 un ejemplo de esta optimizacin aplicada a un programa en Pas++).A continuacin se muestra un ejemplo de esta optimizacin:

A continuacin se muestra un ejemplo de lo que realiza esta optimizacin:

}

Fig 3.1 El algoritmo de propagacin de copias es el siguiente (aplicada a un programa en Pas++)

El entorno de desarrollo nos debe permitir mostrar todas las funcionalidades del intrprete, adems de hacer visibles las estructuras internas. El entorno de desarrollo se muestra a continuacin:

Figura 3.2 El entorno de desarrolloSe tiene en cuenta las siguientes funcionalidades para el entorno de desarrollo: El editor de texto: el cual nos permite escribir programas fuente, adems de copiar, cortar y pegar texto.//cdigo en c++ compilado en lenguaje IDE PAS++class Prueba2begin int atrib3; int atrib4; sub blic int retrocede(& inta) begin a-a.1; wrin("trrr"); this.atrib3-100: this.atrib4-this.atrib3*2; wrin(this.atrb3); wrin(this.atrb4); wrin("trfin"); endend

class pruebabegin int atrb1: int atrb2: class Prueba bool b1;

sub public int avanza(& int a) begin a=a+1:

Figura 3.3 Editor de texto Funciones bsicas: como nuevo, abrir, guardar, guardar como e imprimir.

Figura 3.23 Funciones bsicas La opcin de interpretacin: la cual nos permite compilar y ejecutar programas escritos en Pas++.

Figura 3.24 Ejecucin de un programa en el IDELa opcin de optimizacin: la cual nos permite optimizar el cdigo intermedio de nuestro programa, para posteriormente visualizarlo en la tabla de cdigo generada. Figura 3.4 Funciones del intrprete La opcin de modificacin dinmica de cdigo: la cual nos permite usar las opciones insert, remove y modify; para insertar, remover y modificar cdigo del programa respectivamente.Figura 3.6 Modificacin dinmica de cdigo

La opcin de mostrar la tabla de cdigo: la cual nos permite observar dicha tabla, es decir, una lista operaciones de cdigo intermedio. Se mostrar por cada uno: el nombre de la operacin (por ejemplo, TREAD), y los argumentos necesarios para ejecutar dicha operacin.

Figura 3.7 Tabla de cdigo

Actividad 3. Ensayo que establezca las tendencias y tcnicas empleadas en lenguajes que requieren de una mquina virtual para su ejecucin sobre multiplataforma (20%).

Introduccin Multiplataformaes un atributo conferido aprogramasinformticos o mtodos y conceptos de cmputo que son implementados e interoperan en mltiples plataformas. El software multiplataforma puede dividirse en dos tipos; uno requiere unacompilacinindividual para cada plataforma que le da soporte, y el otro se puede ejecutar directamente en cualquier plataforma sin preparacin especial, por ejemplo, el software escrito en unlenguajeinterpretado obytecodeprecompilado portable para los cuales los intrpretes o paquetes en tiempo de ejecucin son componentes comunes o estndar de todas lasplataformas. Por ejemplo, una aplicacin multiplataforma puede ejecutarse en MicrosoftWindowsen la arquitecturax86,Linuxen la arquitectura x86 yMac OS Xya sea en el PowerPC o sistemasAppleMacintoshbasados en x86. Una aplicacin multiplataforma se puede ejecutar tanto en todas las plataformas existentes, como en tan solo dos plataformas

Marco tericoUna plataforma es una combinacin de hardware y software utilizado para ejecutar aplicaciones de software. Una plataforma puede ser descrita simplemente como unsistema operativoo arquitectura de ordenador, o podra ser la combinacin de ambos (un ejemplo de una plataforma comn es MicrosoftWindowsque se ejecuta en la arquitectura x86). Otras conocidas plataformas de computadoras de escritorio incluyen Linux/Unix y Mac OS X (ambos de los cuales son a su vez multiplataforma). Hay, sin embargo, muchos dispositivos, como los telfonos mviles que tambin son efectivamente plataformas informticas, pero menos comnmente pensado de esa manera. Una aplicacin se puede escribir en dependencia de las caractersticas de una determinada Plataforma, ya sea elhardware, sistema operativo, o mquina virtual en que se ejecuta. La plataforma Java es una mquina virtual de la plataforma que se ejecuta en sistemas operativos y tipos de hardware, y es una plataforma de software comn para escribir (programar).

PLATAFORMAS DE HARDWARE

Una plataforma de hardware puede referirse a laarquitecturadel ordenador o la arquitectura del procesador. Por ejemplo, los CPUs x86 y x86-64 constituyen una de las ms comunes las arquitecturas de computadoras en uso en los ordenadores de propsito general. Estas mquinas suelen ejecutar una versin de Microsoft Windows, aunque tambin se puede ejecutar otro sistema operativo, tales como Linux, OpenBSD, NetBSD, Mac OS X y FreeBSD.Una arquitectura ARM es comn en los telfonos inteligentes yTablet PC, que corren Android, iOS y otros sistemas operativosmviles.

PLATAFORMAS DE SOFTWARE

Las plataformas de software pueden ser un sistema operativo o entorno de programacin, aunque ms comnmente se trata de una combinacin de ambos. Una notable excepcin a esto es Java, que utiliza un sistema operativo independiente de lamquina virtualpara cada cdigo compilado, conocido en el mundo de Java comobytecode. Ejemplos de plataformas de software incluyen: Android(sistema operativo) para telfonos inteligentes yTablet PC AmigaOS(m68k), AmigaOS 4 (PowerPC), AROS (x86, PowerPC, m68k),MorphOS(PowerPC) BSD, muy multiplataforma (verNetBSD, por ejemplo) Java Linux (x86, x86-64, PowerPC, y otras arquitecturas) iOS (ARM) Mac OS X (x86, x86-64) Microsoft Windows (x86, x86-64, ARM) DOS sistemas de tipo en el x86: MS-DOS, IBM PC-DOS, DR-DOS, FreeDOS, etc. OS/2, eComStation Solaris (SPARC, x86, x86-64) La CLI, tambin conocido por los nombres de aplicacin .NET Framework (de Microsoft) y Mono (de Novell)

PLATAFORMA JAVA

Como ya se ha sealado, laplataforma Javaes una excepcin a la regla general de que un sistema operativo es una plataforma de software. El lenguaje Java requiere de una mquina virtual, o un "CPU virtual" en el que se ejecuta todo el cdigo que se escribe en el lenguaje. Esto permite que el mismo ejecutable binario pueda ejecutarse en todos los sistemas, apoyado por el software Java, a travs del uso de una mquina virtual Java (JVM). Ejecutables de Java no se ejecutan de forma nativa en el sistema operativo, es decir, ni de Windows, ni Linux ejecutanprogramasJava directamente.Aunque el cdigoJavano se ejecuta de forma nativa, la JVM es plenamente capaz de proporcionar servicios relacionados con el sistema operativo, como el disco I/O y el acceso a la red, si los privilegios adecuados se conceden. La JVM permite a los usuarios decidir el nivel de proteccin adecuado, segn una ACL. Por ejemplo, el acceso a disco y de red est habilitado normalmente para aplicaciones de escritorio, pero no para applets basados en el navegador.JNI tambin se puede utilizar para permitir el acceso a funciones especficas de los sistemas operativos. En la actualidad, los programas Java pueden ejecutarse en Microsoft Windows, Mac OS X, Linux y sistemas operativosSolaris. Para aplicaciones mviles, los plugins de los navegadores se utilizan en dispositivos basados en Windows y Mac, Android tiene soporte incorporado para Java.

SOFTWARE MULTIPLATAFORMA

Para que el software pueda ser considerado multiplataforma, debe ser capaz de funcionar en ms de una arquitectura de ordenador o sistema operativo. Esto puede ser una tarea que consume tiempo, ya que los diferentes sistemas operativos tienen diferentes interfaces de programacin de aplicaciones o API (por ejemplo, Linux utiliza una API diferente de Windows).El hecho de que un determinado sistema operativo se pueda ejecutar en diferentes arquitecturas de computadora no quiere decir que el software escrito para ese sistema operativo automticamente funcione en todas las arquitecturas que soporta el sistema operativo. Por ejemplo, a partir de agosto de 2006 OpenOffice.org no se ejecutaba de forma nativa en los AMD64 o Intel 64 lneas deprocesadoreslos estndares para computadores dex86-6464 bit. Sin embargo, desde entonces la situacin ha cambiado, y la suite OpenOffice.org de software ha sido portada a los sistemas de 64-bit. Esto tambin significa que slo porque un programa se escriba en un popular lenguaje de programacin como C o C++, no tiene por qu funcionar en todos los sistemas operativos que soporten la programacin de dicho lenguaje o incluso en el mismo sistema operativo en una arquitectura diferente.

Desarrollo de las tendencias y tcnicasLa optimizacin es un tema complejo, que tiene como objetivo maximizar la eficiencia temporal y especial de los programas. Las tcnicas usuales se basan en: Disear adecuadamente las aplicaciones.Esto debera cumplirse para todo el software en general, pero es importante tener en cuenta que a mejor diseo, ms facilidad y menos necesidad de optimizacin posterior.Elegir buenos algoritmos.Hemos de estudiar qu algoritmos se adaptan mejor a las especificaciones del problema a resolver. No sirve de nada realizar una excelente implementacin de un algoritmo concreto si ste no es el ms adecuado para nuestra tarea.Intentar exprimir todo el potencial del hardware utilizado.Para ello es necesario un gran conocimiento del hardware y de las herramientas de programacin usadas. Debemos estudiar cmo organizar nuestro cdigo, para que a su vez el compilador pueda generar cdigo mquina de mayor calidad. En algunas ocasiones especiales merece la pena escribir nosotros mismos el cdigo ensamblador, normalmente cuando se trata de hardware especfico que el compilador no suele saber aprovechar. La correcta eleccin del algoritmo que ha de resolver nuestro problema es fundamental. He aqu algunos conceptos bsicos sobre algoritmos. Los dos recursos crticos que consumen los algoritmos son el espacio(memoria) y el tiempo(velocidad). Siempre es preferible maximizar la velocidad y disminuir el uso de memoria. Coste temporal - tiempo de CPU utilizado Coste espacial - cantidad de memoria utilizadaAl tamao de la entrada de datos del algoritmo se le llamacomplejidad del problema. Para poder comparar y/o medir la eficiencia de los algoritmos, necesitamos definir una medida vlida para todos ellos. La unidad de medida que usaremos ser lanotacin asinttica. Es una notacin que nos permite evaluar el ritmo de crecimiento de una funcin. No se pretende establecer el coste exacto de un algoritmo, sino evaluar esas magnitudes en funcin del volumen de datos de entrada.Estudiaremos el rendimiento de los algoritmos para entradas de datos muy grandes (ya que es ste el caso en que la ineficiencia de un programa puede ser crtica).Siempre expresaremos la eficiencia en funcin del volumen de datos (complejidad).Cundo y cmo optimizar."La raz de todos los males es la optimizacin prematura." - D. KnuthEsta frase es realmente cierta, ya que tendemos a intentar optimizar algoritmos que se encuentran incompletos, inacabados o que no son adecuados a nuestro problema. Cuando implementemos un algoritmo, primero hemos de hacerlo de una forma sencilla y clara. En la mayora de los casos tenemos que comprobarque funcionan, pues no siempre somos tan pacientes como para estudiarlos bien sobre el papel primero. Si intentamosultra-optimizarun algoritmo que ni siquiera hemos probado antes, pronto nos encontraremos en un infierno de sesiones de depuracin y errores. Es mucho mejor hacer una implementacin simple y clara (que no ineficiente) al principio, comprobar que el algoritmo se comporta como esperbamos, e intentar forzarlo un poco para encontrar posibles errores. Todo esto se resume en la famosa norma KISS (Keep It Simple, Stupid). Una vez tengamos nuestra rutina totalmente testada y a prueba de bombas, podremos ya pasar a la fase de optimizacin. Si el aumento de rendimiento despus de la optimizacin es apenas apreciable, puede incluso considerarse dejar el algoritmo originalsin optimizar, y ganar en claridad de cdigo.Herramientas de optimizacin y depuracin: El uso de herramientas de optimizacin es muy recomendable y beneficioso desde el primer momento. Aqu se muestra una pequea recopilacin con el software ms popular.Software comercial: Compuware DevPartner Studio, suite de depuracin y optimizacin para Microsoft Visual Studio 6.0 y .NET. Abarca todos los lenguajes de Visual Studio e incluye una herramienta para control y optimizacin de cdigo fuente bajo Visual Basic .NET y Visual C#

Tcnicas para optimizar el cdigo: Minimiza grafismos si persigues rapidez. Pre calcula lmites de hash y de lecturas de buffers. Pre visionar salidas de bucles. Intenta valorar roturas de cdigo. Usa elementos propios del lenguaje. Reutiliza los elementos ms frecuentes. Elimina nombres comunes o denominaciones de dialogs y ventanas populares. Usa contadores pequeos. Usa algortmica de testeo. Usa llaves, usa elses para tratar idntica entrada, en definitiva: usa una buenametodologade programacin. Preserva la compatibilidad de tu script con diferentes versiones.

Conclusin

Multiplataforma: Es un trmino usado para referirse a los programas,sistemas operativos, lenguajes de programacin, u otra clase de software, que puedan funcionar en diversas plataformas. Por ejemplo, una aplicacin multiplataforma podra ejecutarse enWindowsen un procesador x86, enGNU/Linuxen un procesador x86, y en Mac OS X en uno x86 (solo para equipos Apple) o en un PowerPC.

Una plataforma es una combinacin de hardware y software usada para ejecutar aplicaciones; en su forma ms simple consiste nicamente de un sistema operativo, una arquitectura, o una combinacin de ambos. La plataforma ms conocida es probablemente Microsoft Windows en una arquitectura x86; otras plataformas conocidas sonGNU/LinuxyMac OS X(que ya de por s son multiplataforma). Hay, por otro lado, aparatos como celulares que, a pesar de ser plataformas informticas, no se consideran usualmente como tales. El software en general est escrito de modo que dependa de las caractersticas de una plataforma particular; bien sea el hardware, sistema operativo, o mquina virtual en que se ejecuta. La plataforma Java es una mquina virtual multiplataforma, tal vez la ms conocida de este tipo, as como una plataforma popular para hacer software (que, por supuesto, se considera multiplataforma). Ejemplos de plataformas son IBM-PC, que incluye 'las arquitecturas' I386 (x86), IA64 o AMD64 (x86-64); Macintosh, que incluye la arquitectura Gecko y PowerPC; y SPARC. Existen programas multiplataforma, que permiten ejecutarse en diversas plataformas. Tambin existen emuladores, que son programas que permiten ejecutar desde una plataforma programas de otra emulando su funcionamiento.(ecured, 2014)

[footnoteRef:1] [1: ecured. (23 de Enero de 2014). www.ecured.cu. Obtenido de http://www.ecured.cu/index.php/Multiplataforma]

Actividad 4. Cuadro sinptico de los criterios de tiempo de ejecucin o extensin de cdigo generado (20%).

Tiempo en el que un programa de computadora se ejecuta en el sistema operativo

-Con la puesta en memoria principal del programa-Inicia -El sistema opertico comienza a ejecutar sus instrucciones.

- En el momento en que este enva al sistema operativo la seal de terminacin.

Finaliza -Satisfactoriamente: El programa no produjo ningn Error.

-Anormal: El programa produjo algn erro y el Sistema debi forzar su finalizacin.

-Este tiempo suele emplearse en oposicin a tiempo de compilacin para indicar si una accin o hecho sucede en uno u otro tiempo

- Manejo de excepciones: diseado para manejar errores en tiempo de ejecucin suministrando una forma estructurada de atrapar (catch) situaciones completamente inesperadas as como tambin errores predecibles.

Criterios de tiempo de ejecucin o extensiones de cdigo generado

Actividad 5. Reporte del avance por equipo del proyecto final consistente en desarrollar software de base: traductor, intrprete o compilador (20%).

REPORTE DEL AVANCE POR EQUIPO DEL PROYECTO FINAL

En este documento se presentan los resultados del primer avance realizado del proyecto en base a las actividades realizadas anteriormenteRecopilando los fundamentos que nos lleven a crear un software de base como propuesta.Objetivo: Conocer e Identificar los diferentes tipos de optimizacin que permita eficientar el cdigo intermedioIntroduccin:

Ya hemos pasado por las etapas de anlisis lxico, sintctico y semntico, ahora viene la etapa de generador de cdigo intermedio. El generador de cdigo intermedio transforma la salida del anlisis semntico, en una representacin cercana a un lenguaje intermedio cercano al cdigo objeto. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto. Existen varias formas de representar el cdigo intermedio, mediante rboles sintcticos, notacin postfija y cdigo de tres direcciones.

ETAPAS DEL DESARROLLO DE NUESTRO COMPILADOR:

GENERAR EL CDIGO DE TRES DIRECCIONES

El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. Es un tipo de cdigo que lo podemos representar en su forma general como la siguiente preposicin: x: =y op z Donde x, y y z pueden ser nombres, constantes o variables temporales y op representa cualquier tipo de operador. PRIMERA ETAPA:Cada instruccin de tres direcciones centenera por lo menos un operador, adems de la asignacin, por tanto, cuando se generan estas instrucciones, el traductor tiene que decidir el orden en que deben efectuarse las operaciones.

SEGUNDAETAPA:El traductor debe generara un nombre temporal para guardar los valores calculados por cada instruccin.

TERCERA ETAPA:Algunas instrucciones de tendrn menos de tres operados, por ejemplo, la asignacin.

REPRESENTACIONES QUE SON COMPETENTES POR EL COMPILADOR DE CDIGO INTERMEDIO HASTA AHORA

NOTACIN POSTFIJASe le da Instruccin: x:= a+b+(c*d)

queda en notacin postfija como: x ab+cd*+:=

TRES DIRECCIONES

Se da instruccin: x:= (a+b*c)/d Su representacin es:Operador op1 op2(1) MULT b c(2) SUMA a (1)(3) DIV (2) d(4) ASIGNA (3) xDonde (1), (2) y (3) representan punteros a las instrucciones de cdigo dos direcciones 1, 2 3 respectivamente.

CUADRUPLICACada instruccin cuadruplica exposicin se divide en cuatro campos: operador, arg1, arg2, y resultado. El ejemplo anterior se representa a continuacin cuadruplica en formato:Op.Arg1Arg2Resultado*cdr1+br1r2+r2r1r3=r3aEJEMPLO DEL CODIGO INTERMEDIO EN EL LENGUAJE DE PROGRAMACION EL CUAL SE DETERMINO EN LENGUAJE CLenguaje de programacin C

Instruccin que se le dio a compilar: En una variable de tipo entero se le asigna 2 bytes de memoria y una variable de tipo float se asigna 4 bytes de memoria.int a;float b;Allocation process:{offset = 0} int a; id.type = int id.width = 2offset = offset + id.width {offset = 2} float b; id.type = float id.width = 4offset = offset + id.width {offset = 6}

NUESTRO RESULTADO

Este procedimiento crea una entrada en la tabla de smbolos, de nombre de la variable, en su tipo y el tipo de desplazamiento de direccin relativa en su rea de datos.

PROPUESTA DE LA GRAMTICA EN EL CDIGO A GENERAR

NUESTRA SIGUIENTE INSTRUCCIN:suma=a+b;PODEMOS PROPONER LA GRAMTICA SIGUIENTE CON SUS RESPECTIVAS ACCIONES SEMNTICAS:I ::= ld = li{nodo(*) = generaCodigo ( =,(1),(2) )}ld ::= id {nodo(*) = (1).obtenTablaSimbolos() }

li ::= e {nodo(*) = (1) }

e::= e + e { nodo(*) = generaCodigo ( +,(1),(2) )}

| e-e | . | id { nodo(*) = (1).obtenTablaSimbolos() }

*Ntese que se asume que el scanner devuelve los tokens al parser y va agregando a una tabla de smbolos los id o literales que encuentra.

EL CDIGO INTERMEDIO QUE SE GENERARA ES EL SIGUIENTE:

(0) + a b(1) = suma (0)LUEGO A PARTIR DE ESTOS TRIPLES (CDIGO INTERMEDIO) PODRAMOS GENERAR EL SIGUIENTE CDIGO EN ENSAMBLADOR DE ALGUNA MQUINA:

A DB 2 DUP(?) ;esta primera parte barriendo la estructura de datos de la tabla de smbolosB DB 2 DUP(?)SUMA DB 2 DUP(?)MOV AX, OFFSET A ;esta parte de cdigo barriendo la estructura de datos de triplesADD AX OFFSET BMOV OFFSET SUMA AX

DE AQU PODRAMOS GENERAR EL SIGUIENTE LENGUAJE DE MQUINA DE ALGUNA MQUINA:

0; los 2 bytes de A suponiendo que de tipo short00 ; los 2 bytes de B00; los 2 bytes de SUMA0AFH ;suponiendo que es el cdigo binario (leng. de mquina) de MOV AX0000FFH ;suponiendo que es el cdigo binario (leng. de mquina) de ADD AXA5H020056HA7H0400INT ; alguna instruccin para terminar el programa y regresar el control al sistema operativo20H

Conclusin

La generacin de cdigo intermedio es uno de los pasos ms importantes ya que es el intermediario que permite a la computadora entender lo que nosotros le queremos ordenar y as ella pueda ejecutar nuestras ordenes, optimizar esta parte es de muy alta importancia ya que hace que sea ms rpida la conversin de un cdigo a otro, cuando usamos un lenguaje de programacin por lo general usamos un lenguaje entendible por nosotros los humanos y por lo general esta estandarizado el lenguaje ingls para programar, pero como las computadoras no pueden entender este tipo de lenguaje es necesario pasarlo al lenguaje ensamblador ya que es de mucha ms rpida comprensin para las computadoras y hace que se ejecuten ms rpido las instrucciones que nosotros queremos darle a la mquina.El objetivo de las tcnicas de optimizacin es mejorar el programa objeto para que nos d un rendimiento mayor. La mayora de estas tcnicas vienen a compensar ciertas ineficiencias que aparecen en el lenguaje fuente, ineficiencias que son inherentes al concepto de lenguaje de alto nivel, el cual suprime detalles de la maquina objeto para facilitar la tarea de implementar un algoritmo.Es importante tambin tener unas buenas bases algebraicas para estimar el nmero de veces que se realiza una instruccin dentro de un ciclo ya sea simple o anidado, una buena forma de esto es saber un poco sobre la complejidad de los algoritmos ya que aqu es donde se estudia todo lo necesario para saber este tipo de informacin, es importante saber que tan eficiente es un algoritmo para poder optimizar lo ms posible los algoritmos y como se pueden crear de la mejor manera para que puedan ser usados en diferentes maquinas sin ninguna diferencia significante, otro de los puntos que vimos fue el de reconocer que recursos consume cada de las instrucciones que usamos para programar en una mquina y as saber que recursos son los que se vern afectados a la hora de ejecutar diferentes tipos de instrucciones, buscamos nuevas tcnicas para la optimizacin de cdigo ya que en algunas ocasiones es necesario ejecutar nuestros programas en mquinas virtuales y es de suma importancia tener estas consideraciones en cuenta para que no se nos presente ningn problema a futuro.

Bibliografas

(s.f.). Obtenido de file:///C:/Users/rubizitha/Desktop/Compilador%20optimizador%20-%20Wikipedia,%20la%20enciclopedia%20libre%206.html

automatas, l. y. (s.f.). Obtenido de http://www.di-mare.com/adolfo/cursos/2008-1/pp-GenCodInterMed.pdf

(s.f.). Generacion de codigo.John E.Hopcrof, R. (s.f.). Teora de autmatas, lenguaje y computacin.

Lenguajes-y-Automatas-II. (s.f.). Obtenido de http://es.scribd.com/doc/219732692/Lenguajes-y-Automatas-II-Unidad-I-Sem-2-2013-1#scribd

Nuevas tcnicas para la optimizacin de cdigo. (s.f.). Obtenido de http://es.wikipedia.org/wiki/Plataforma_Java