martes, 16 de noviembre de 2010

Glosario

  • Programa fuente: es aquel que nos permite escribir un algoritmo mediante un lenguaje formal. Por eso al código desarrollado al programar se le llama código fuente
  • Programa objeto: es el resultado de traducir un programa fuente para obtener un lenguaje comprensible por la máquina. 

OPTIMIZACIÓN DE CÓDIGO

La optimización de código puede realizarse durante la propia generación o como paso adicional, ya sea intercalado entre el análisis semántico y la generación de código (se optimizan las cuádruplas) o situado después de ésta.
 
En esta fase se intenta mejorar el código, en el sentido de reducir la cantidad de resursos (tiempo y memoria) necesarios.

Clasificación de optimizaciones:
  1. Dependientes de la máquina.
    • Asignación de registros (ver capítulo anterior).
    • Instrucciones especiales ("idioms").
    • Reordenación del código.
  2. Independientes de la máquina.
    • Ejecución en tiempo de compilación.
    • Eliminación de redundancias.
    • Cambio de orden.
    • Reducción de frecuencia de ejecución (invariancias).
    • Reducción de fuerza.
Optimización y depuración suelen ser incompatibles. Por ejemplo, si se elimina totalmente una instrucción, puede ser imposible poner una parada en ella para depuración. Ejemplo:
    x = x;

GENERADOR DE CÓDIGO INTERMEDIO

Algunos compiladores generan una representación explícita del programa
fuente. Este código es independiente de la máquina y a veces se usa en
conjunto con intérpretes, en lenguajes independientes de la plataforma
como JAVA. Esta representación debe ser fácil de producir, ayudar a la
optimización y fácil de traducir al programa objeto.

Ejemplo: código de tres direcciones, donde cada instrucción tiene como
máximo tres operandos, supone una CPU en la que cada posición de
memoria puede actuar como un registro de la CPU. Reglas:

– Cada instrucción de tres direcciones tiene a lo sumo un operador
(además de la asignación). Puede tener menos.

– El compilador debe generar un nombre temporal para guardar los
valores calculados por cada instrucción.


Ejemplo para la segunda instrucción:
t1 = b*c
t2 = int-to-real(3)
corX = t1 + t2

ANÁLISIS SEMÁNTICO

Aqui se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre sí, etc. En definitiva, comprobará que el significado de lo que se va leyendo es válido.

El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintáctico para comprobar las restricciones y delimitaciones semánticas.
 

 El análisis semántico es posterior al sintáctico y mucho más difícil de formalizar que éste. Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre sí, etc. En definitiva, comprobará que el significado de lo que se va leyendo es válido.

ANÁLISIS SINTÁCTICO

Esta es nuestra segunda etapa para generar nuestro compilador.
El analizador sintáctico obtiene una cadena de componentes léxicos del analizador léxico, y comprueba si la cadena puede ser generada por la gramática del programa fuente.



El análisis sintáctico para generar gramáticas pueden ser de dos maneras:



  • Análisis sintáctico descendente.
    Se considera un intento de encontrar una derivación por la izquierda para una cadena de entrada.
    También se puede considerar como un intento de construir un árbol de análisis sintáctico para la entrada comenzando desde la raíz y creando nodos del árbol en orden previo.
     Construye árboles de análisis sintáctico desde arriba (raíz) hacia abajo (hojas).  El análisis se realiza de lo general a lo particular.




  • Análisis sintáctico ascendente. Construyen árboles de análisis sintáctico comenzando en las hojas y suben hacia la raíz.  El análisis se realiza de lo particular a lo general.

miércoles, 10 de noviembre de 2010

Me gusta..!

La primer fase del compilador  me parece algo complicado, pero la explican muy bien...! mew gusta ojala y sigan publicnado información tan útil...!
Saludossss a todos ....!!!! ; )

Analizador Léxico

El analizador léxico es la primera fase el compilador.


Función principal del analizador léxico
Leer los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos que utiliza el analizador sintáctico para hacer el análisis.