lizeth_giron. Con tecnología de Blogger.
RSS

TAREA_8_TIPOS DE OPTIMIZACION(LOCAL,CICLOS Y MIRILLA)

INSTITUTO TECNOLOGICO SUPERIOR DE JEREZ

LENGUAJES Y AUTOMATAS 2.

TAREA_8_TIPOS DE OPTIMIZACION(LOCAL,CICLOS Y MIRILLA)

ALUMNA:
LIZETH GUADALUPE GIRON ALVARADO
15 DE NOVIEMBRE DEL 2013
________________________________________________________________________
¿QUE ES LA OPTIMIZACIÓN?
Es el proceso que se realiza para mejorar el rendimiento de una actividad o proceso, evitando así la pérdida de tiempo y de datos. Puede ser aplicado al rendimiento de sistemas operativos, software, dispositivos móviles y aplicaciones. Puede ser aplicada en cualquier área donde se busque o desee realizar una actividad de forma eficaz y eficiente, sin perder datos relevantes ni tiempo, es la encargada de las constantes actualizaciones.

El objetivo de las técnicas de optimización es mejorar el programa objeto para que nos dé un rendimiento mayor, se pueden clasificar o dividir de diversas formas.
Por una parte podemos hablar de aquellas técnicas que son dependientes de la máquina, y aquellas que son independientes de la máquina (o sea, técnicas que sólo se pueden aplicar a una determinada máquina objeto  y técnicas que son aplicables a cualquier máquina objeto).

LAS TÉCNICAS DE OPTIMIZACIÓN LOCALES:
Características:
a) Optimizaciones que no modifican la estructura. Son:
1. Eliminación de sub-expresiones comunes.
2. Eliminación de código muerto.
3. Renombrar variables temporales.
4. Intercambio de sentencias independientes adyacentes.
b) Transformaciones algebraicas. Son aquellas transformaciones que simplifican expresiones y/o reemplazan operaciones costosas de la máquina por otras menos costosas.
c) Existe otra categoría de  optimización local se le llama optimización peephole, e intenta mejorar el rendimiento del programa por medio de reemplazar esa breve secuencia de instrucciones objeto por otra secuencia más corta y/o más rápida.
Por ejemplo:
1. Eliminación de instrucciones redundantes.
2. Optimizaciones en el flujo de control.
3. Simplificaciones algebraicas.
4. Uso de instrucciones máquina específicas.





TECNICAS DE OPTIMIZACION DE CICLOS:
CARACTERISTICAS:
·         son parte en el rendimiento de un programa dado.
·         realizan acciones repetitivas, y si dichas acciones están mal realizadas, el problema se hace N veces más grandes.
         trata de encontrar elementos que no deben repetirse en un ciclo.
         mejoramiento de consultas en SQL o en aplicaciones remotas
         difícil saber el uso exacto de algunas instrucciones.


TECNICAS DE OPTIMIZACION DE MIRILLA:
CARACTERISTICAS:
         estructurar de manera eficiente el flujo del programa, sobre todo en instrucciones de bifurcación como son las decisiones, ciclos y saltos de rutinas.
         tiene los saltos lo más cerca de las llamadas, siendo el salto lo más pequeño posible
         Se recorre el código buscando combinaciones de instrucciones que puedan ser remplazadas Por otras equivalentes más eficientes
         se utiliza en: C#, Java, Javacc, Pyton, Haskell, Ensamblador, Condiciones if, Condiciones while, case.

DIFERENCIAS


LOCAL
CICLOS
 MIRILLA
Reemplazan operaciones costosas de la máquina por otras menos costosas.
Es difícil saber el uso exacto de algunas instrucciones
         tener los saltos lo más cerca de las llamadas, siendo el salto lo más pequeño posible





BIBLIOGRAFIA:
Aho (2006), et. al. Compiladores: Principios y Técnicas. Segunda Edición.


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

TAREA_7_RESUMEN_ FUNCIONES Y ESTRUCTURAS

INSTITUTO TECNOLOGICO SUPERIO DE JEREZ

LENGUAJES Y AUTOMATAS II

TAREA_7_RESUMEN FUNCIONES

ALUMNA:
LIZETH GUADALUPE GIRON ALVARADO
MODULO 13
 1-NOVIEMBRE-2013
___________________________________________________________________________________
El proceso de la compilación se desglosa en lenguaje fuente (etapa inicial o front-end ) y lenguaje objeto (etapa  final o back-end), La etapa inicial traduce un programa fuente a una representación intermedia a partir de la cual la etapa final genera el código objeto; siendo La generación de código es la tarea más complicada de un compilador.
Una representación intermedia: es una estructura de datos que representa al programa fuente durante el proceso de la traducción a código objeto, en un árbol de análisis sintáctico como junto con la tabla de símbolos.
El código intermedio puede ser considerado como un atributo sintetizado, y es visto como una cadena de caracteres y se puede diseñar un esquema de traducción dirigido por la sintaxis (ETDS) que genere dicho código al recorrer el árbol de análisis sintáctico en orden postfijo.
*La optimización de código intermedio, se puede realizar a nivel local: solo utilizan la información de un bloque básico para realizar la optimización. A nivel global: que usan información de varios bloques básicos.
El termino optimización de código es inadecuado ya que no se garantiza el obtener, en el sentido matemático, el mejor código posible atendiendo a maximizar o minimizar una función objetivo (tiempo de ejecución y espacio). El termino de mejora de código sería más apropiado que el de optimización. Además de la optimización a nivel de código intermedio, se puede reducir el tiempo de ejecución de un programa actuando a otros niveles: a nivel de código fuente y a nivel de código objeto.
*El código de tres direcciones: es una secuencia de proposiciones de la forma general
x = y op z
Donde op representa cualquier operador; x, y, z representan variables definidas por el programador o variables temporales generadas por el compilador.es también  una representación linealizada (de izquierda a derecha) del árbol sintáctico en la que los nombres temporales corresponden a los nodos internos.
Contienen  instrucciones para el flujo de control (goto). Una etiqueta simbólica representa el índice de una proposición de 3-direcciones en la lista de instrucciones. Una proposición de código de 3-direcciones se puede implantar como una estructura tipo registro con campos para el operador, los operandos y el resultado. La representación final será entonces una lista enlazada o un vector de proposiciones.
Un archivo de salida en lugar de construir la lista de proposiciones en el atributo cod, lo que facilita la implementación.
*Implementación mediante cuádruplos: es una estructura tipo registro con cuatro campos que se llaman (op, result, arg1, arg2). El campo op contiene un código interno para el operador.
*Implementación mediante tripletes:
En la notación de tripletes se necesita menor espacio y el compilador no necesita generar los nombre temporales. Sin embargo, en esta notación, trasladar una proposición que defina un valor temporal exige que se modifiquen todas las referencias a esa proposición. Por simplicidad se podrían considerar los campos result, arg1, arg2 como punteros a carácter.
*Reutilización de nombres temporales
Los nombres temporales se pueden reutilizar mediante un sencillo método que consiste en llevar una cuenta c, iniciada a cero, de variables temporales. Cuando se utilice un nombre temporal como operando hay que decrementar el valor de c en 1. Siempre que se genere un nuevo nombre temporal se usa el valor del contador (sprintf (símbolo, ‘‘t %d’’, c)) y se incrementa el valor de c en 1.
*Traducción de expresiones booleanas
Las expresiones booleanas se utilizan principalmente como parte de las proposiciones condicionales que alteran el flujo de control del programa, if-then, if-then-else, while-do. Las expresiones booleanas se componen de los operadores booleanos and, or, not aplicados a variables booleanas o expresiones relacionales.
Por ejemplo Uno de los metodos para traducir expresiones booleanas a código de 3-direcciones consiste en codificar numéricamente los valores true y false y evaluar una expresión booleana como una expresión aritmética, siguiendo unas prioridades.
*Traducción de proposiciones de control
Para generar el código correspondiente a esta proposición habrá que añadir a la función generadora de código () un nuevo caso para la sentencia switch que contemple este tipo de nodo en el árbol sintáctico, nodo n if-then.
*Traducción de funciones
La generación de código para las funciones es la parte más complicada porque depende de la maquina objeto y de la organización del entorno de ejecución. La traducción de funciones implica dos etapas: la definición de la función; crea un nombre, parámetros y código del cuerpo de la función pero no se ejecuta la función en ese punto. La llamada a la función desde una parte del programa (trataremos a los procedimientos como funciones que no devuelven valores). Una llamada crea los valores actuales para los parámetros y realiza un salto al código de entrada de la función que se ejecuta y retorna al punto de la llamada.
*Cuerpo de la función
Para traducir el cuerpo de la función bastara recorrer el árbol hasta encontrar un nodo de tipo n function a partir del cual colgara el bloque de sentencias del cuerpo de la función.
Esto implica las siguientes tareas:
1. Recoger la dirección libre actual y utilizarla como dirección para rellenar (relleno con retroceso) las llamadas a la función que estamos deteniendo.
2. Generar código para desopilar los argumentos de la función y meterlos en las variables correspondientes.
3. Generar código para el bloque de sentencias S.
4. Desopilar la dirección de retorno.
5. Generar la salida de la función con RETURN.
6. Unir los trozos de código para tenerlos en una única lista de
Cuádruplos.
*Eliminación de subexpreciones comunes
Si una expresión se calcula más de una vez, se puede remplazar el cálculo de la segunda por el valor de la primera expresión.
*Propagación de copias
La propagación de copias considera las proposiciones de la forma a = b. Después de esta sentencia sabemos que ha y b tienen el mismo valor, por tanto, podemos remplazar cada vez que aparezca a por b, con la esperanza de que podamos remplazar todas las ocurrencias de a hasta que se convierta en un nombre muerto y se pueda entonces eliminar la proposición de copia.
*Eliminación de código muerto
El código muerto aparece como consecuencia de la propagación de copias y es esto lo que hace que la técnica de propagación de copias sea tan útil. Aunque es poco probable que el programador introduzca código muerto o inactivo, este puede aparecer como resultado de transformaciones.
*Transformaciones aritméticas:
Para reducir la cantidad de computación transformando operaciones más costosas por otras menos costosas. Existen tres tipos de transformaciones algebraicas básicas.
 1. Cálculo previo de constantes: Se trata de calcular a nivel de compilación el valor previo de constantes en vez de hacerlo en tiempo de ejecución que retardara la ejecución de un programa.
2. Reducción de intensidad: En la mayoría de las maquinas las operaciones de multiplicación y division son substancialmente más costosas que las operaciones de suma y resta.
3. Empaquetamiento de temporales: Se trata de reusar los temporales con el fin de ahorrar espacio.
Después de haber optimizado el código es normal pensar que se puedan usar menos temporales y sería conveniente entonces renombrar estos temporales.
*Traslado de código
Esta transformación toma una expresión que produce el mismo resultado independientemente del número de veces que se ejecute un lazo y la coloca antes del lazo.
*Variables de inducción
Se trata de identificar las variables que permanecen ligadas entre sí en la ejecución, están relacionadas entre sí de forma que conocido el valor de una se puede obtener el de la otra.
 



  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

TAREA_6_ MAPA_CONCEPTUAL_REPRESENTACION DE CODIGOS INTERMEDIOS


 
LENGUAJES Y AUTOMATAS II
TAREA_6: REPRESENTACION DE CODIGOS INTERMEDIOS
ALUMNAS:
ANA ISABEL VILLAGRANA CARRILLO
LIZETH GUADALUPE GIRON ALVARADO

VILLANUEVA ZACATECAS A 1 DE NOVIEMBRE DEL 2013
___________________________________________________________________________________


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

TAREA_5_SINTESIS_IMPORTANCIA DE UN COMPILADOR

INSTITUTO TECNOLOGICO SUPERIOR DE JEREZ

LENGUAJES Y AUTOMATAS II

TAREA_5_SINTESIS_IMPORTANCIA DE UN COMPILADOR

DOCENTE:
ISC.JORGE MIGUEL VAZQUEZ MARQUEZ

ALUMNA:
LIZETH GUADALUPE GIRON ALVARADO

MODULO13

Un compilador es un pequeño programa informático, que se encarga de traducir (compilar) el código fuente de cualquier aplicación que se esté desarrollando. En pocas palabras, es un software que se encarga de traducir el programa hecho en lenguaje de programación, a un lenguaje de máquina que pueda ser comprendido por el equipo y pueda ser procesado o ejecutado por este. Existen varios tipos de compiladores, los cuales se adecuan a los requerimientos de los programadores. Podemos destacar los compiladores cruzados, compiladores optimizadores, compiladores de una sola pasada y de varias pasadas, compiladores JIT y los conocidos intérpretes, que traducen el código del programa en tiempo real.
Cada uno de estos compiladores, se adecua a un lenguaje en específico o a varios
 Por lo tanto es de suma importancia la aplicación de los compiladores por lo que se destaca:
El compilador tiene una visión global del programa, por lo que la información de mensajes de error es más detallada.
El compilador comprueba con sus diferentes fases que son el analizador léxico, analizador sintáctico y analizador semántico, si hay errores en el código, al ejecutar cada una de esas etapas, el compilador comprueba etapa por etapa, pero si hay error no ejecuta la siguiente etapa. Gracias a esto podemos darnos cuenta si nuestro programa es correcto y si no, nos marca el error correspondiente; también  es el núcleo o motor de que a simple vista no se ve, señalar los errores que se cometen a la hora de programar y poder transformar el código a lenguaje máquina para que esta lo entienda y se ejecute correctamente el programa.
Entonces su importancia radica en el hecho que tiene que interpretar todo el código fuente que se le asigna y hacerlo entendible para la computadora. En un cualquier lenguaje de programación, el compilador es el archivo más importante y es el que le da vida al programa, todo lo demás consiste en la sintaxis que el compilador tiene que revisar para traducirlo correctamente a la máquina.

De otra manera si un compilador no existiera no sería posible la ejecución del programa ya que simplemente no detectaría errores y no arrojaría nada, con el apoyo de estos podemos verificar que tipos de error se muestra y así poder corregirlo haciendo pruebas al sistema.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

TAREA_4_ERRORES COMUNES EN PROGRAMACION

INSTITUTO TECNOLOGICO SUPERIOR DE JEREZ

LENGUAJES Y AUTOMATAS II

TAREA_4_ERRORES DE PROGRAMACION

DOCENTE:
ISC.JORGE MIGUEL VAZQUEZ MARQUEZ

ALUMNA:
LIZETH GUADALUPE GIRON ALVARADO

MODULO13


_________________________________________________________________________________
Los errores de programación en Java, así como en otros lenguajes, ocurren más que todo en la sintaxis y errores en la lógica. Los errores en la sintaxis son causados cuando el compilar Java (java) no puede reconocer la sentencia. Esto causa que el compilador devuelva un mensaje de error, usualmente con una línea de código de referencia. También se conoce a los errores de sintaxis como errores en tiempo de compilación. Los errores de programación pertenecen a tres categorías:
* Errores de compilación: conocidos como errores del compilador, son errores que impiden que su programa se ejecute.
* Errores en tiempo de ejecución: cuando su programa intenta una operación que es imposible que se lleve a cabo.
* Errores lógicos: código puede compilarse y ejecutarse sin errores, pero el resultado de una operación puede generar un resultado no esperado.
Cuando un programador es principiante es común que el primer error que cometa es el no guardar el archivo del documento con el mismo nombre de la clase esto nos indicara que no puede cargar la clase principal;
Otro error es cuando nos indica que no se puede encontrar el archivo dentro del paquete correspondiente o indica la falta de alguna librería que permita la utilización  de las sentencias;
 La falta de puntos, comillas, llaves paréntesis y corchetes o simplemente ubicarlas en un lugar inadecuado también nos genera un error de sintaxis;
 El uso de las letras mayúsculas y minúsculas en el comienzo de las palabras reservadas deriva un error de sintaxis.
La utilización de sentencias con omisiones por ejemplo en los arrays que deben estar declarados en 0.
La declaración del tipos de las variables puede ser considerados de tipo logico.Y los errores lógicos son todos aquellos en los que definimos las operaciones o ciclos que lleva nuestro programa.


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

TAREA_3_TABLA DE SIMBOLOS

INSTITUTO TECNOLOGICO SUPERIOR DE JEREZ
"LENGUAJES Y AUTOMATAS II"
TAREA 3
TABLA DE SIMBOLOS DE UN PROGRAMA
 DOCENTE:
ISC.JORGE MIGUEL VAZQUEZ MARQUEZ
MODULO 13
ALUMNA:
LIZETH GUADALUPE GIRON ALVARADO
18 DE OCTUBRE DEL 2013.


TABLA DE SIMBOLOS

EJEMPLO DE UN PROGRAMA:


import java.io.*;
public class cualquier_numerotabla
{

                public static void main(String args[]){
               
                InputStreamReader isr=new InputStreamReader(System.in);
                BufferedReader br=new BufferedReader(isr);

                               int z;
                               int n;
                               int y=1;
                               int s1=0;
               
                               try{
                                    System.out.println("Dar numero a la tabla a calcular");
                                      s1=Integer.parseInt(br.readLine());
                                   }
                                                                catch (Exception e)
                                                                              {
                                                                                  e.printStackTrace();
               
                                                                              }
                                  
                 
                                                for (n=1;n<=10;n++)
                                                                                   {
                                                                                              z=s1*y;
                                                                                              System.out.println(s1+"*"+y+"="+z);
                                                                                              y=y+1;
                                                                                    }

                }
                }
NOMBRE
TIPO
AMBITO
DIRECCION
Import java.io*;
Palabra reservada

Librería, entrada y salida de datos
1bloque
Public
Palabras reservadas
Modificador/control de acceso
1bloque
Class
Palabras reservadas
Definición de la clase
1bloque
Cualquier_tipo_tabla
String
ID de clase
1bloque
{}
Llaves (apertura/cierre)
Bloques de código
2bloque
Public
Palabras reservadas
Modificador/control de acceso
2bloque
Static
Palabra reservada
Poryecto estatico
2bloque
Void
Plabra reservada

2bloque
Main
Palabra reservada
Método
2bloque
String
Palabra reservada
Variable cadena
2bloque
Args
Palabra reservada
las aplicaciones de consola reciban argumentos
2bloque
[]
Símbolo
Arreglo
2bloque
InputStreamReader
Clase en java
Agregar texto
3bloque
isr=new
Palabra reservada
Crear objeto
3bloque
InputStreamReader(System.in);
sentencia
Indica que  el objeto viene del teclado
3bloque
BufferedReader
Sentencia
Clase que lee la información
3bloque
br=new
Objeto

3bloque
int z;int n;int y=1;int s1=0;

Identificadores
Variable tipo entero
3bloque
Try_catch (Exception e)
Ciclo
Tratamiento de las exepciones
4bloque
     System.out.println
Sentecia
Impresion del resultado y cambio d elinea
4bloque
readLine
Metodo
Lee de linea en linea
4bloque
    e.printStackTrace
sentencia
imprimir la pila de mensajes de excepciones generadas
5bloque
;
Símbolo
Fin de las sentencias
Varios
=
Operador de asignacio
igualdad
Varios
“”
Comillas
Títulos o texto
4bloque
For
Ciclo
Se repite una operación
6Bloque
n
Identificador
Varianle entero
6bloque
Operador
Menorque
6bloque
++
Operadores unarios
Autoincremento
6bloque
()
Carácter
Contenedor de sentencias
varios
z=s1*y;
Operación

7bloque
Z
identificador
Variable tipo entero
7bloque
*
Operador multiplicación
Indica multiplicación
7bloque
Y
identificador
Variable tipo entero
7bloque
+
Operadpr add
Operación
bloque 7





               
 


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS