La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERÍA EN COMPUTACIÓN

Presentaciones similares


Presentación del tema: "CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERÍA EN COMPUTACIÓN"— Transcripción de la presentación:

1 CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERÍA EN COMPUTACIÓN
COMPILADORES M. En C.C. Ma. Dolores Arévalo Zenteno

2 Fases de la metodología de compilación para la creación de lenguajes
PROGRAMAS RELACIONADOS CON UN COMPILADOR

3 Fundamentos Los compiladores ayudan a promover el uso de lenguajes de alto nivel y con ello se minimiza la sobrecarga de ejecución de los programas escritos en estos lenguajes. A demás estos también son imprescindibles a la hora de hacer efectivas las arquitecturas computacionales de alto rendimiento en las aplicaciones del usuario. El conocimiento sobre compiladores es de gran relevancia para un ingeniero ya que amplia su visión al momento de diseñar algoritmos y la codificación de los mismos.

4 Objetivo Identificar ampliamente programas que funcionan con el mismo fundamento de los compiladores, haciendo notar que la importancia de éstos en la ámbito profesional de un Ingeniero en Computación.

5 Traduce y ejecuta línea a línea
Intérpretes Programa origen Interprete Traduce y ejecuta línea a línea Errores Ejecuta el programa fuente inmediatamente en vez de generar un código objeto que se ejecuta después de que se completa la traducción.

6 Ensambladores Es un traductor para el lenguaje ensamblador de una computadora en particular, es una forma simbólica del lenguaje de máquina de la computadora y es fácil de traducir. Código Ensamblador Ensamblador Código Maquina Errores

7 Ligadores Código fuente Código fuente Código fuente  Recopila el código que se compila o ensambla por separado en diferentes archivos objeto a un archivo que es directamente ejecutable. Código objeto Código objeto Código objeto Ligador Librerías Ejecutable

8 Cargadores Memoria principal
Se dice que tal código es re localizable y un cargador resolverá todas las direcciones re localizables relativas a una dirección base o de inicio dada .El uso de un cargador hace más flexible el código ejecutable pero el proceso de carga con frecuencia ocurre en segundo plano o conjuntamente con el ligado. Rara vez un cargador es en realidad un programa por separado. Cargador

9 Preprocesadores Preprocesador Compilador
Codigo.c //Codigo …. #include <uno.c> int main(){ return 1; } Codigo.c #include <uno.c> int main(){ return 1; } Preprocesador Uno.c //Codigo …. Compilador  Es un programa separado que es invocado por el compilador antes de que comience la traducción real. Un preprocesador puede eliminar los comentarios incluir otros archivos y ejecutar situaciones de macro.

10 Editores Los compiladores por lo regular aceptan programas escritos utilizando cualquier editor que pueda producir una archivo estándar tal como un archivo ASCII. Más recientemente ha sido integrado junto con editores y otros programas en un ambiente de desarrollo interactivo.

11 Depuradores 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <string.h> #define LONG_MAX_LINEA 4096 #define NOMBRE_ARCHIVO "cuento.txt" int main(void){ FILE *fichero; char linea[LONG_MAX_LINEA]; char *p; if ((fichero = fopen(NOMBRE_ARCHIVO, "r")) == NULL){ perror(NOMBRE_ARCHIVO); return 0; } printf("Contenido del fichero:\n"); if(!fgets(linea,100,fichero)){ printf("El fichero esta vacio.\n"); Descripcion Tipo Nombre Valor Es un programa que puede utilizarse para determinar los errores de ejecución en un programa compilado.

12 Perfiladores Un perfilador es un programa que recolecta estadísticas sobre el comportamiento de un programa objeto durante la ejecución.

13 El Proceso de Compilación
Un compilador es un programa que puede leer un programa que puede leer un programa en un lenguaje y traducirlo en un programa equivalente en otro lenguaje. Compilador Programa Fuente Programa Destino

14 Compilación Análisis Síntesis Código fuente Error en el programa
Codigo.c #include <uno.c> int main(){ return 1; } Código fuente Error en el programa Error al generar Código destino

15 Análisis (Etapa Inicial):
Divide al PF en sus elementos componentes y crea una representación intermedia. Se determinan las operaciones y se registran en una estructura de árbol (ej. árbol sintáctico) t1 := entareal (60) t2 := id3 + t1 t3 := id2 + t2 id1 := t3

16 Síntesis (Etapa Final):
Construye el programa objeto deseado a partir de la representación Intermedia (requiere técnicas más especializadas) MOVF id3, R2 MULF % 60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1

17 El Proceso de Compilación
El proceso de compilación se puede ver como una secuencia de fases, cada una de las cuales transforma una representación del programa fuente en otro. Analizador Semántico Flujo de Caracteres Analizador Léxico Flujo de Tokens Analizador Sintáctico Árbol Sintáctico Árbol Sintáctico Generador de Código Intermedio

18 editor de carga y enlace
Los compiladores pueden requerir otros programas para el procesamiento de un programa destino ejecutable. programa fuente programa objeto en lenguaje ensamblador código de máquina relocalizable biblioteca archivos bj.relocal. código de máquina absoluto preprocesador compilador ensamblador editor de carga y enlace

19 En la práctica varias fases pueden agruparse, y las representaciones intermedias entre las fases agrupadas no necesitan construirse de manera explicita. Optimizador de Código Independiente de la Máquina Generador de Código Intermedio Generador de Código Representación Intermedia Representación Intermedia Optimizador de Código Independiente de la Máquina Código Máquina Destino Código Máquina Destino

20 Análisis Léxico (Escaneo)
Es la primera fase de compilación. Este lee el flujo de caracteres que ponen el programa fuente y los agrupa en secuencias significativas, conocidas como lexemas. Y para cada lexema el Analizador Léxico produce como salida un token de la forma: (nombre-token, valor-atributo)

21 Análisis Léxico (Escaneo)
El <nombre-token> es un símbolo abstracto que se utiliza durante el análisis sintáctico, y el <valor-atributo> apunta a una entrada en la tabla se símbolos para este token. La información de dicha tabla se necesita para el análisis semántico y la generación de código. Tabla de símbolos 1 Token1 2 Token2 3 token3

22 Análisis Sintáctico (Parser)
Es la 2da fase de compilación. Utiliza los tokens para crear una representación intermedia en forma de árbol, en la cual cada nodo interior representa una operación y los hijos del nodo representan los argumentos de la operación.

23 y=-2; resul = x+ -y; resul = x + y; Análisis Semántico
Utiliza el árbol sintáctico y la información en la tabla de símbolos para comprobar la consistencia semántica del programa fuente con la definición del lenguaje. Realiza comprobación de tipos, donde verifica que cada operador tenga operandos que coincidan. y=-2; resul = x + y; resul = x+ -y;

24 Generador de Código Intermedio
El compilador puede crear 1 o + representaciones intermedias similares al código maquina. La representación debe ser fácil de producir y fácil de traducir en la máquina destino. int i; while(i<10){ printf(“hola”); i++; } LDF R2, id3 MULF R2, R2, #10 LDF R1, id2 ADDF R1, R1, R2 STF id1, R1

25 Optimización de código
Trata de mejorar el código intermedio, de manera que produzca un mejor código destino. Mejor significa mas rápido, mas corto y que consuma menos poder. Optimizador de Código Independiente de la Máquina Código Intermedio Súper Código

26 Generación de Código Se recibe una representación intermedia del programa fuente y la asigna a la lengua destino. Después, las instrucciones intermedias se traducen en secuencias de instrucciones de maquina. LDF R2, id3 MULF R2, R2, #10 LDF R1, id2 ADDF R1, R1, R2 STF id1, R1

27 Agrupamiento de Fases en Pasadas
ETAPA INICIAL Y ETAPA FINAL Inicial : Fases que dependen del lenguaje fuente Hasta cierta optimación Final : Partes que dependen de la maq. objeto y del leng. intermedio PASADAS Se agrupan las actividades de varias fases en una misma pasada (lectura de un archivo de entrada y escritura de un archivo de salida) REDUCCION DEL NUMERO DE PASADAS Pocas pasadas --> Varias fases dentro de una pasada --> Prog. completo en memoria en representación intermedia Fusión de código intermedio y objeto: “ backpatching”

28 Token Un token es un par que consiste en un nombre de token y un valor de atributo opcional. a q0 q1 a b q2

29 Los nombres de los tokens son los símbolos de entrada que procesa el analizador sintáctico.
(id,”x”) (op,”=”) (id,”a”) (op,”+”) (id,”b”) (op,”*”) (id,”c”) (punct,”;”) (id,”y”) (id,”3”) Analizador Sintáctico 𝑥=𝑎+𝑏 ∗𝑐; 𝑦= 3+𝑏 ∗𝑐;

30 A partir de este momento, en general escribiremos el nombre de un token en negrita.
(id,”x”) (op,”=”) (id,”a”) (op,”+”) (id,”b”) (op,”*”) (id,”c”) (punct,”;”) (id,”3”)

31 Con frecuencia nos referiremos a un token por su nombre.
(id,”x”) Token x (op,”=”) Token = (id,”a”) Token a (op,”+”) Token + (id,”b”) Token b (op,”*”) Token * (id,”c”) Token c (punct,”;”) Token ; (id,”3”) Token 3

32 Lexema Es una secuencia de caracteres en el programa fuente, que coinciden con el patrón para un token y que el analizador léxico identifica como una instancia de ese token. Componente lexico lexema Identificador indice, a, temp Numero entero 1990, 1, 22 If if Do do Operador dividir / Operador asignar =

33 Patrón Es una descripción de la forma que pueden tomar los lexemas de un token. lexema patron indice, a, temp Letras seguidas de letras o digitos 1990, 1, 22 Diguitos seguidos de mas digitos if Letra i seguida de letra f do Letra d seguida de letra o / Carácter / = Carácter =

34 Identificador miCadena25 Para los identificadores y algunos otros tokens, el patrón es una estructura más compleja que se relaciona mediante muchas cadenas. En el caso de una palabra clave como token, el patrón es sólo la secuencia de caracteres que forman la palabra clave. Una letra seguida de números y/o letras

35 Ejemplo Token Lexema Patrón Const const Relación <, <=, != <|<=|!= Id x, y, cont Letras seguidas de otras letras y/o digitos

36 Tabla de símbolos Es un Array ampliable de registros que pueden ser indexados por una cadena en lugar de un entero. Se procesa de nuevo Se realiza la operación y se procede normalmente Analizar Operación(datos) Se realiza la operación Si No Se elimina de la tabla de símbolos y no se considera para procesos posteriores

37 La cadena es el identificador y el registro asociado contiene la información recogida sobre el identificador. 0x001 Div 0x005 Mod 0x009 i 0x001 0x002 0x003 0x004 0x005 0x006 0x007 0x008 0x009 0x010 d i v FDC m o

38 FUNCTION Identificar (Nombre identificador)
La interfaz básica de un módulo de tabla de símbolos consta de una sola función: FUNCTION Identificar (Nombre identificador) RETURNING un puntero a Info identificador;

39 Referencias Diseño de compiladores modernos Mc Graw Hill Dick Grune, Henri E. Bal, Ceriel J. H. Jacobs y Koen G. Langendoen Compiladores principios, técnicas y herramientas Pearson Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman


Descargar ppt "CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERÍA EN COMPUTACIÓN"

Presentaciones similares


Anuncios Google