La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

INFORMATICA VII (Programación e implementación de sistemas)

Presentaciones similares


Presentación del tema: "INFORMATICA VII (Programación e implementación de sistemas)"— Transcripción de la presentación:

1 INFORMATICA VII (Programación e implementación de sistemas)
UNIVERSIDAD LATINA INFORMATICA VII (Programación e implementación de sistemas) COMPILADORES

2 Fases de Compilación Un compilador opera como una secuencia de fases, cada una de las cuales transforma una representación del programa fuente en otro. En la práctica las fases pueden agruparse en análisis y síntesis. Al análisis se le conoce como el front-end del compilador, a la síntesis, que es la traducción propiamente dicha, se le denomina back-end.

3 Fases de Compilación En general podemos mencionar seis fases de la compilación. La primera fase, el análisis lexicográfico, identifica tokens (las “palabras”) en un programa. La segunda fase el análisis sintáctico, obtiene la estructura de un programa por medio de su gramática. La tercera fase, análisis semántico, finaliza el análisis del programa y lo traduce a una forma intermedia para las fases de síntesis. La cuarta fase , optimización, encuentra las maneras de reducir el tiempo o el espacio a utilizar cuando el programa traducido es ejecutado. La quinta fase, preparación para la generación del código, asigna memoria y registros para mantener los valores y direcciones de las variables y expresiones en el tiempo de ejecución. La sexta fase, generación de código, produce código en lenguaje ensamblador a partir de la representación intermedia (optimizada).

4 Fases de Compilación

5 Análisis lexicográfico (rastreo o tokenizing).
Este análisis agrupa secuencias de caracteres desde el programa fuente de entrada en unidades llamadas lexemas, componentes léxicas o tokens. Así el rastreo puede considerarse un mapeo: secuencia de caracteres => secuencia de tokens. En el análisis lexicográfico, la secuencia de caracteres se rastrea hasta que se encuentra una secuencia permitida; luego se filtra para clasificarla por medio de un tipo como entero o palabra clave o identificador, etc. Los analizadores realizan otras tareas como la eliminación de espacios en blanco y comentarios; en ocasiones crean una tabla de símbolos (o tabla de nombres, una tabla de nombres definidos por el usuario que se utilizan en un programa. (esta creacion de la tabla de nombres también es considerada como parte del análisis semántico. En el análisis lexicográfico también se pueden encontrar los errores simples de ortografía.

6 Análisis lexicográfico (rastreo o tokenizing).
Ejemplo de salida del analizador lexicográfico que es conocida como “flujo de tokens”.

7 Token. Los tokens (componentes léxicas) son las unidades léxicas básicas del mismo modo en que las palabras o los signos de puntuación son las unidades básicas de una oración. Los tokens varían de lenguaje en lenguaje, e incluso de compilador en compilador para el mismo lenguaje. La elección de los tokens es una de las tareas del diseñador de compiladores. Consideraremos las unidades léxicas básicas o tokens como secuencias especiales de caracteres, las cuales comprenden las palabras de nuestro lenguaje. Un token es la unidad más pequeña del lenguaje que tiene significado. Algunos ejemplos de tokens son: a) La palabra clave SI b) La constante 12 c) El identificador X1 d) El operador < o .LT. e) Puntuació ( o ; Estos ejemplos dependen del lenguaje que se utilice. Los tokens se describen por lo general en dos partes, un tipo o clase y un valor, Token = (Tipo, Valor): a) (Palabra Clave, SI) b) (Ident, “Nuevo”) c) (Oper, >) d) (Ident, “MáxNúm”) e) (Palabra clave, ENTONCES).

8 Análisis sintáctico (fase gramatical).
Es más complejo que el analizador lexicográfico. Agrupa los tokens en estructuras sintácticas, muy similar a como teníamos que estructurar las oraciones en la primaria. Para un lenguaje de programación, bb * 12 consiste de tres tokens (bb, * y 12) y deben agruparse en una estructura denominada expresión. Mientras que, X1 := a + bb * 12; debe agruparse en una estructura llamada sentencia de asignación que contiene la subestructura expresión.

9 Análisis sintáctico (fase gramatical).
Categorías son parte de la gramática del lenguaje

10 Análisis semántico Toma como entrada el árbol de análisis gramatical creado en la fase de análisis sintáctico. Esta fase determina el significado (semántica) del programa mediante la creación de tablas de símbolos, verificando cuales de las variables utilizadas han sido definidas y una infinidad de otras tareas anteriores a la generación de código. Dos de las tareas principales en la fase del análisis semántico son: 1) la verificación estática del programa y 2) la generación de una representación intermedia (RI).

11 Análisis semántico La representación intermedia también denominada lenguaje intermedio o código intermedio (RI, LI p CI), es una forma alternativa para un árbol de análisis gramatical. A veces el analizador gramatical crea su representación intermedia en forma directa; y en ocasiones el árbol de este se convierte a la representación.

12 Optimización Cambia la representación intermedia de modo que la fase final de generación de código producirá código que se ejecutará más rápido u ocupara menos espacio o ambas cosas. Se pueden identificar cuatro tipos de optimización: a) Locales.- Se hacen dentro de una sentencia o grupo de sentencias. Hay dos tipos la de propagación constante y la de eliminación de sub-expresiones comunes. b) De ciclos iterativos.- Se hacen dentro de los ciclos. c) Globales.- Se efectúan sobre un programa o procedimiento. d) De mirilla.- Se realizan después de que el código es seleccionado “atisbando” por una pequeña secuencia de código

13 Optimización

14 Preparación para la generación de código
El compilador decide muchas de las cuestiones acerca de donde residirán los valores dos de las cuestiones en la preparación de la generación de código son: la asignación de memoria y la asignación de registros. Asignación de memoria.- La asignación y el mantenimiento del espacio de memoria para conservar los valores de las variables y expresiones se conoce como asignación de memoria. Asignación de registros.- Los registros se utilizan para conservar los valores de las variables y expresiones, y aunque rara vez hay suficientes para un programa completo, las arquitecturas más recientes basadas en RISC (Conjunto reducido de instrucciones de Cómputo) poseen más.

15 Preparación para la generación de código

16 Generación de código Significa la traducción de la representación intermedia a lenguaje ensamblador, después de la optimización, y después que se han asignado los registros y la memoria.

17 Fases de compilación en un lenguaje de programación.
Las fases de compilación en lenguaje C son: a) Pre-procesado.- Identifica bibliotecas de funciones predefinidas. b) Compilación.- Valida que el programa no tenga errores sintácticos, semánticos conforme a la gramática del lenguaje. c) Enlazado.- Valida que las funciones existan en los binarios de las librerías de C (c.lib).

18 Bibliografía. LEMONE, Karen A.
Fundamentos de Compiladores. Como traducir al lenguaje de la computadora. 1ª. Edición. Compañía Editorial Continental, S. A. de C. V. 1996. ISBN FABREGAT, ERROL, FABREGAT, Rita. Documento electrónico para la asignatura Informática VII. Plan 2005. UNAM. FCA.


Descargar ppt "INFORMATICA VII (Programación e implementación de sistemas)"

Presentaciones similares


Anuncios Google