CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERÍA EN COMPUTACIÓN

Slides:



Advertisements
Presentaciones similares
Clasificación de los compiladores
Advertisements

Prof. Ing.Maria Rosa Damaso Rios
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
¿Compilador ? Es un traductor que convierte un texto escrito en un lenguaje fuente y lo traduce a un programa objeto en código máquina.
Teoría de Autómatas y Compiladores
Facultad de Ciencias de la Computación
Fundamentos de programación
Temas Operaciones básicas Instalando el compilador
Unidad 1. Introducción al proceso de compilación.
Teoría de lenguajes y compiladores
Programación 1 Introducción
Teoría de lenguajes y compiladores
Programas Son una serie o secuencia de instrucciones entendibles por los ordenadores que permiten la realización de las acciones o tareas para las que.
METODOLOGIA DE LA PROGRAMACION
IINTRODUCCION A LA CIENCIA DE LA COMPUTACION Y A LA PROGRAMACION
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
Tema 6. Conceptos básicos de programación
ALGORITMOS Y ESTRUCTURAS DE DATOS
Programación de sistemas
UNIVERSIDAD DE MANAGUA I CUATRIMESTRE INTRODUCCION A LA PROGRAMACION
TRADUCTOR DE UN PROGRAMA
Fundamentos de Programación
Lenguaje C.
Proceso de información en la computadora
CONDICIONES DE LA MATERIA
M.C. Meliza Contreras González
Teoría de lenguajes y compiladores
Archivos.
FUNDAMENTOS DE PROGRAMACION
INGENIERIA EN SISTEMAS COMPUTACIONALES
ANALISIS SINTACTICO Parte I
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
Universidad Nacional de Jujuy Facultad de Ingeniería
ESTRUCTURA DE DATOS ESD-243
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Tema 6. Conceptos básicos de programación (Repaso) Prof. María Alejandra Quintero Informática Año 2013.
Diseño de algoritmos La computadora puede realizar procesos y darnos resultados, sin que tengamos la noción exacta de las operaciones que realiza. Con.
1.4 Traductor y Su estructura
Procesadores de Lenguajes
LENGUAJES DE PROGRAMACIÓN
Todo traductor esta basado en una gramática para el lenguaje fuente. Todo traductor esta basado en una gramática para el lenguaje fuente. Una gramática.
Elementos básicos del lenguaje
Programación de Sistemas
FUNDAMENTOS DE PROGRAMACION
Análisis Léxico Área Software de Base.
COMPILADORES DIANA ROCIO OLAYA MESA.
Elementos básicos del lenguaje
INFORMATICA VII (Programación e implementación de sistemas)
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
Objetivo Mostrar los fundamentos de la programación a través de ejemplos y prácticas utilizadas cotidianamente en el desarrollo de aplicaciones.
Teoría de lenguajes y compiladores
UNIVERSIDAD LATINA (UNILA)
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
Metodología de la programación
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Prof. Flor Narciso Departamento de Computación
Preposición: suma= var1 + var2 + 10; Análisis Léxico El analizador léxico lee los caracteres del programa fuente, y verifica que correspondan a una secuencia.
PRINCIPIOS DE PROGRAMACIÓN
Tipos de Lenguajes Ensamblador.
Traductores Gilberto G. Romero H..
Programación de Sistemas
FUNDAMENTOS DE PROGRAMACIÓN
 Panorama General Fundamentos de Programación M.I. Jaime Alfonso Reyes Cortés.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
Fundamentos de Programación Unidad I Conceptos Básicos.
Autómatas y Compiladores. Primera Semana. Ricardo Vargas Del Valle A35469.
El proceso ensamblador. José Luis Vergara Soberanis.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Transcripción de la presentación:

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

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

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.

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.

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.

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

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

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

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.

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.

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.

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

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

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

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

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

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

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

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

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)

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

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.

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;

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

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

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. 10011 11011 01101 01101 11001 01010 01101 11100 01101 11110 00011 00100 10110 00111 01011 01110 10011 01101 10110 01101 01101 11010 10001 01101 LDF R2, id3 MULF R2, R2, #10 LDF R1, id2 ADDF R1, R1, R2 STF id1, R1

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”

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

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+𝑏 ∗𝑐;

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”)

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

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 =

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 =

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

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

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

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

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;

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 http://tllz-andyisc.blogspot.mx/2010/08/resumen-compiladores.html www.angelfire.com/linux/eotto/comp_clase2.pdf