CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERA EN COMPUTACIN COMPILADORES
- Slides: 39
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.
Intérpretes Programa origen Interprete Traduce y ejecuta 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 Errores Código Maquina
Ligadores Códig o fuente Código objeto Librerías Códig o fuente Código objeto Ligador Códig o 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 Ejecutable
Cargadores 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. Memoria principal Cargador
Preprocesadores Codigo. c #include <uno. c> int main(){ … return 1; } Uno. c //Codigo …. Preprocesado r Codigo. c //Codigo …. #include <uno. c> int main(){ … return 1; } 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){ Descripcion 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"); Tipo Nombre Valor Tipo Es un programa que puede utilizarse para determinar los errores de ejecución en un programa compilado.
Perfiladores 6 4 Un perfilador es un programa que recolecta estadísticas sobre el comportamiento de un programa objeto durante la ejecución. 6 4 2 0
El Proceso de Compilación Un compilador es un programa que puede leer un programa en un lenguaje y traducirlo en un programa equivalente en otro lenguaje. Programa Fuente Compilador Programa Destino
Compilación Codigo. c #include <uno. c> int main(){ … return 1; } Análisis Síntesis Código fuente Codigo. c #include <uno. c> int main(){ … return 1; } Código destino Error en el programa Error al generar
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) t 1 : = entareal (60) t 2 : = id 3 + t 1 t 3 : = id 2 + t 2 id 1 : = t 3
Síntesis (Etapa Final): Construye el programa objeto deseado a partir de la representación Intermedia (requiere técnicas más especializadas) MOVF id 3, R 2 MULF % 60. 0, R 2 MOVF id 2, R 1 ADDF R 2, R 1 MOVF R 1, id 1
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. Flujo de Caracteres Analizador Léxico Flujo de Tokens Analizador Sintáctico Árbol Sintáctico Analizador Semántico Árbol Sintáctico Generador de Código Intermedio
Los compiladores pueden requerir otros programas para el procesamiento de un programa destino ejecutable. programa fuente preprocesador programa fuente compilador programa objeto en lenguaje ensamblador código de máquina relocalizable editor de carga y enlace código de máquina absoluto biblioteca archivos bj. relocal.
• En la práctica varias fases pueden agruparse, y las representaciones intermedias entre las fases agrupadas no necesitan construirse de manera explicita. Generador de Código Intermedio Representación Intermedia Optimizador de Código Independiente de la Máquina Código Máquina Destino Representación Intermedia Optimizador de Código Independiente de la Máquina Generador de 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 Token 1 2 Token 2 3 token 3
• Análisis Sintáctico (Parser) • Es la 2 da 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.
• 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. resul = x+ -y; y=-2; 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 MULF LDF ADDF STF R 2, R 1, id 1, id 3 R 2, id 2 R 1, R 1 #10 R 2
• 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. Código Intermedio Optimizador de Código Independiente de la Máquina 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. LDF MULF LDF ADDF STF R 2, R 1, id 1, id 3 R 2, id 2 R 1, R 1 #10 R 2 10011 11011 01101 11001 01010 01101 11100 01101 11110 00011 00100 10110 00111 01011 01110 10011 01101 101101 11010 10001 01101
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. q 0 a q 1 b a q 2
Los nombres de los tokens son los símbolos de entrada que procesa el analizador sintáctico. Tokens Analizador Sintáctico (id, ”x”) (op, ”=”) (id, ”a”) (op, ”+”) (id, ”b”) (op, ”*”) (id, ”c”) (punct, ”; ”) (id, ”y”) (op, ”=”) (id, ” 3”) (op, ”+”) (id, ”b”) (op, ”*”) (id, ”c”) (punct, ”; ”)
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, ”x”) (op, ”=”) (id, ” 3”) (op, ”+”) (id, ”b”) (op, ”*”) (id, ”c”) (punct, ”; ”)
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, ”x”) Token x (op, ”=”) Token = (id, ” 3”) Token 3 (op, ”+”) Token + (id, ”b”) Token b (op, ”*”) Token * (id, ”c”) Token c (punct, ”; ”) Token ;
Lexema Componente lexico lexema Identificador indice, a, temp Numero entero 1990, 1, 22 If if Do do Operador dividir / Operador asignar = 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.
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 mi. Cadena 25 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 Const Relación Id Lexema const <, <=, != x, y, cont Patrón const <|<=|!= 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 Operación(datos) Analizar 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. 0 x 001 Div 0 x 005 Mod 0 x 009 i 0 x 001 0 x 002 0 x 003 0 x 004 0 x 005 0 x 006 0 x 007 0 x 008 0 x 009 0 x 010 d i v FDC m o d FDC i FDC
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_clase 2. pdf
- Centro universitario uaem texcoco
- Centro universitario uaem ecatepec
- Centro universitario uaem ecatepec
- Licenciatura en lenguas uaem texcoco
- Uaem texcoco licenciaturas
- Universidad de panama azuero
- Centro regional universitario de azuero
- Centro universitario herminio da silveira
- Centro universitario mar de cortés doctorado
- Centro universitario anglo mexicano
- Computacin
- Computacin
- Computacin
- Computacin
- Texcoco
- Dicesis
- Expresiones regulares compiladores
- Texcoco
- Compiladores
- Texcoco
- Curso de compiladores
- Plantel texcoco de la escuela preparatoria
- Tabla de simbolos lenguajes y automatas
- Lenguajes
- Uaem ameca
- Competencias abet
- 1.ingenieramédicaprogramadoraperiodistahijastra
- Universidad alonso de ojeda
- Centro zonal soledad atlantico
- Benedetto gui
- Nucleo universitario rafael rangel
- Calidad del aprendizaje universitario
- Analisis foda de un estudiante universitario
- Acceso universitario usfx 2019
- Jubilación docente universitario simultaneidad
- Himno ucv letra
- Colegio universitario cecilio acosta
- Rouen cathedral set v
- Instituto universitario naval
- Pensionado universitario nelson leon vizcarra