La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Año 20041 Introducción al Diseño de Compiladores ASIGNATURA: COMPILADORES.

Presentaciones similares


Presentación del tema: "Año 20041 Introducción al Diseño de Compiladores ASIGNATURA: COMPILADORES."— Transcripción de la presentación:

1 Año Introducción al Diseño de Compiladores ASIGNATURA: COMPILADORES

2 Año BIBLIOGRAFÍA [AHO] Compilers. Principles, Techniques, and Tools Aho, Sethi; Adisson-Wesley –1986 [TEU] Compiladores: Conceptos fundamentales. Teufel ; Addison Wesley [SAN] Compiladores. Teoría y construcción. Sanchís Llorca y Galán Pascual. Paraninfo – 1988 [WIR] Algoritmos + Estructuras de Datos = Programas Niklaus Wirth. Ediciones del Castillo –1980 [GHE] Conceptos de Lenguajes de Programación Ghezzi, Jazayeri; Ed. Díaz de Santos [LEV] Lex &Yacc. Levine; Mason; Brown; OReilly & Ass. 1995

3 Año CONTENIDOS nTema 1.- Introducción a la Compilación nTema 2.- Lenguajes, autómatas y gramáticas nTema 3.- Análisis léxico nTema 4: Tablas de Símbolos nTema 5.- Análisis sintáctico nTema 6.- Análisis semántico nTema 7.- Principios básicos de la fase de síntesis

4 Año INTRODUCCIÓN

5 Año Conceptos relacionados Con algunas técnicas básicas de escritura de compiladores se pueden construir traductores para una gran variedad de lenguajes y máquinas Arquitectura de Computadoras Arquitectura de Computadoras Lenguajes de Programación Lenguajes de Programación Teoría de Lenguajes Teoría de Lenguajes Teoría de Algoritmos Teoría de Algoritmos Ingeniería de Software Ingeniería de Software Compiladores

6 Año Compiladores Un compilador es un programa que lee un programa en un lenguaje y lo traduce a un programa equivalente en otro lenguaje, y además informa al usuario sobre la presencia de errores en el programa de entrada programa programa fuente objeto mensajes de error Aparente complejidad- Tareas básicas compilador

7 Año CLASIFICACION GENERAL nDe una pasada o de múltiples pasadas nDe carga y de ejecución nDe depuración o de optimización HISTORIA n Experimentación relacionada a traducción de fórmulas n1950: difícil escritura nPrimer FORTRAN: 18 años nHoy: técnicas sistemáticas, lenguajes de implementación, entornos de programación y herramientas de software

8 Año Computadoras Hombre HISTORIA Código Máquina Lenguaje Ensamblador Código Máquina Ensamblador Código Máquina Lenguaje Ensamblador Lenguaje de Alto Nivel Compilador Ensamblador

9 Año nEl Diseño de un compilador surge como resultado de: 4Desarrollo de un nuevo lenguaje de programación 4Adición de extensiones a los ya existentes 4Explotación de las características del hardware A futuro: 4Extensión para el cómputo paralelo y distribuido HOY…. Y A FUTURO

10 Año nENSAMBLADOR Traducen programas escritos en lenguaje ensamblador a código máquina n Traducen programas escritos en lenguaje de alto nivel a código intermedio o a código máquina INTERPRETE No genera código objeto, analiza y ejecuta directamente cada proposición del Programa Fuente (PF) nPREPROCESADOR Sustituyen macros, incluyen archivos o extensión del lenguaje. COMPILADOR TIPOS DE SISTEMAS DE COMPILACIÓN

11 Año SISTEMA PARA PROCESAMIENTO DE UN LENGUAJE estructura del programa fuente programa fuente programa objeto en lenguaje ensamblador código de máquina relocalizable biblioteca archivos obj.relocal. código de máquina absoluto preprocesador ensamblador compilador editor de carga y enlace

12 Año nANÁ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) nSÍNTESIS (Etapa Final): Construye el PO deseado a partir de la representación Intermedia (requiere técnicas más especializadas) PARTES DE LA COMPILACIÓN

13 Año UN AMBIENTE GENERAL DE COMPILACIÓN Fuente Análisis léxico Análisis sintáctico Análisis semántico Intermedio Generador de código Código relocalizable Enlazador Objeto Más: Sistemas de edición y depuración

14 Año ANÁLISIS DEL PROGRAMA FUENTE nANALISIS LINEAL (Léxico- Exploración- Scanner) Se lee el programa como una cadena de izquierda a derecha, se agrupan y se generan componentes léxicos o tokens (secuencia de caracteres con significado colectivo) nANALISIS JERARQUICO (Sintáctico- Parser) Los componentes léxicos se agrupan en colecciones anidadas con un significado colectivo ( frases gramaticales que por lo general se representan mediante árboles sintácticos) nANALISIS SEMANTICO Se realizan revisiones para asegurar que los componentes de un programa se ajustan de un modo significativo

15 Año EJEMPLO DE ANÁLISIS: posicion := inicial + velocidad * 60 a ) Componentes léxicos: 1. El identificador posicion 2. El símbolo de asignación := 3. El identificador inicial 4. El signo de suma: + 5. El identificador velocidad 6. El signo de multiplicación: * 7. El número 60 Los identificadores o nombres reconocidos se organizan en una tabla de símbolos que se usará en los pasos siguientes

16 Año posicion := inicial + velocidad * 60 b ) Análisis sintáctico (árbol de analis. sint.) proposición de asignación identificador := expresión posicion + expresión expresión identificador expresión * expresión inicial identificador número velocidad 60

17 Año posicion := inicial + velocidad * 60 b ) Análisis sintáctico ( reglas recursivas) lLas construcciones léxicas no requieren recursión (ej. Reconocer un identificador) mientras que las sintácticas suelen requerirlas (ej. Emparejamiento de paréntesis o Begin- End) lLa estructura jerárquica de un programa normalmente se expresa mediante reglas recursivas Exp :: ident | nro Exp :: Exp + Exp| Exp * Exp | (Exp) lLas gramáticas libres de contexto (GLC) son una formalización de reglas recursivas que pueden guiar el análisis sintáctico

18 Año posicion := inicial + velocidad * 60 c ) Análisis semántico lSignificado de una unidad gramatical, interpretación lTraducir la entrada a una forma de representación intermedia lAnálisis y verificación de tipos lUtiliza la estructura jerárquica del Análisis sintáctico lEl árbol semántico permite una representación interna compacta del árbol de análisis sintáctico. Ejemplos: : = : = posicion + inicial * inicial * velocidad 60 velocidad entareal 60

19 Año FASES DE UN COMPILADOR PROGRAMA FUENTE analizador léxico analizador sintáctico administrador analizador semántico manejador de la tabla generador de código intermedio de errores de símbolos optimizador de código generador de código PROGRAMA OBJETO Cada fase transforma al PF de una representación a otra

20 Año ESQUEMA DE BLOQUES DE UN COMPILADOR FUENTE Compilador ANALISIS Scanner Tabla Parser de símbolos SINTESIS Prep. para la Gen. del código OBJETO Gener. del código

21 Año ESTRUCTURA FUNCIONAL DE UN COMPILADOR (de una pasada) SENTENCIA Fuente Explorador Recono- Generador Objeto cedor de código Tabla de símbolos

22 Año COMPILACIÓN DE UNA SENTENCIA EJEMPLO Vel = V0 + Acel Sentencia fuente a compilar V1 = V2 + V3 Resultado del EXPLORADOR RECONOCEDOR: + Análisis sintáctico: V1 = V2 + V3 la sentencia es correcta V1 V2 V3 + = Sentencia en notación polaca (subproducto del reconocedor) LOAD Acel ADD V0 Resultado del GEN. DE CÓDIGO STORE Vel (instrucciones para máquina )

23 Año posicion := inicial + velocidad * 60 nA. Lex: id1 : = id2 + id3 * 60 nA. Sint: : = id1 + id2 * id3 60 nA. Seman: : = id1 + id2 * id3 entareal 60

24 Año nTABLA DE SÍMBOLOS Estructura de datos que contiene un registro por cada identificador, con los campos para los atributos: -- Información sobre la memoria asignada -- tipo -- ámbito -- Si es nombre de procedimiento (número, tipo y método de paso de cada argumento) nPermite encontrar rápidamente cada ID y almacenar o consultar datos de ese registro nEn el Análisis Léxico se detectan los ID y se introducen en la Tabla de Símbolos nLas fases restantes introducen información sobre los ID y después la utilizan ADMINISTRADOR DE LA TABLA DE SÍMBOLOS

25 Año nCada fase puede encontrar errores y debe tratarlo para continuar con la Compilación, permitiendo detectar más errores nLas fases de Análisis Léxico, Sintáctico y Semántico manejan la mayoría de los errores nEn el Análisis Semántico se detectan errores donde la estructura sintáctica es correcta pero no tiene significado la operación ( Por. ej. sumar dos ID, donde uno es el nombre de una matriz y el otro un nombre de procedimiento) DETECCIÓN E INFORMACIÓN DE ERRORES

26 Año nSe genera una representación intermedia explícita del PF nLa representación intermedia es como un programa para una máquina abstracta nEsta representación debe ser fácil de producir y de traducir al programa objeto nUna de ellas es el código intermedio de 3 direcciones (Cada posición de memoria puede actuar como registro) ( Cada instrucción tiene como máximo 3 operandos ) nEjemplo t1 := entareal (60) t2 := id3 + t1 t3 := id2 + t2 id1 := t3 GENERACIÓN DE CÓDIGO INTERMEDIO

27 Año nTrata de mejorar el código intermedio para que resulte un código de máquina más rápido de ejecutar n En el ejemplo: t1 : = id3 * 60.0 id1 : = id2 + t1 La conversión a real se hace en compilación No necesita t2 ni t3. nCompiladores optimadores : La fase de optimación ocupa una parte significativa del tiempo del compilador nHay optimaciones sencillas que mejoran el tiempo de ejecución del programa sin retardar mucho la compilación OPTIMIZACIÓN DE CÓDIGO

28 Año nLa fase final genera código objeto ( en general código de máquina recolalizable o código ensamblador) nSe seleccionan las posiciones de memoria para las variables usadas por el programa. Se traduce cada una de las instrucciones intermedias a una secuencia de instrucciones de máquina nUn aspecto decisivo es la asignación de variables a registros. nEn el ejemplo, utilizando los registros 1 y 2: MOVF id3, R2 MULF % 60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 GENERACIÓN DE CÓDIGO

29 Año nPREPROCESADORES (producen la entrada para un comp.) Procesamiento de Macros Inclusión de archivos Preprocesadores racionales ( estruct. de control) Extensiones a lenguajes ( bases de datos) nENSAMBLADORES Producen código ensamblador que se pasa a un ensamblador para su procesamiento ( versión mnemotécnica del código de máquina: nombres de operaciones y nombres de direcciones de memoria) nENSAMBLADO DE DOS PASADAS (lecturas del archivo IN) Primera: Identificadores - Tabla de símbolos Segunda: Traduce códigos de operaciones e identificadores El resultado es código de maquina relocalizable nCARGADORES Y EDITORES DE ENLACE Modifica las direcciones relocalizables y ubica en memoria. Forma un solo prog. desde varios archivos relocalizables PROGRAMAS RELACIONADOS CON UN COMPILADOR

30 Año nETAPA 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 nPASADAS Se agrupan las actividades de varias fases en una misma pasada (lectura de un archivo de entrada y escritura de un archivo de salida) nREDUCCION 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 AGRUPAMIENTO DE FASES EN LA IMPLEMENTACION

31 Año nSIST. DE AYUDA PARA ESCRIBIR COMPILADORES Comp. de comp. / Generadores de comp. / Sist. generadores de traductores nHERRAMIENTAS GENERALES PARA EL DISEÑO AUTOMÁ- TICO DE COMPONENTES ESPECÍFICOS DE UN COMP. Utilizan leng. específicos para especificar e imple- mentar la componente Ocultan detalles del algoritmo de generación Producen componentes que se pueden integrar al resto del compilador HERRAMIENTAS PARA CONSTRUCCIÓN DE COMPIL.

32 Año nGENERADORES DE ANALIZADORES SINTACTICOS Producen AS a partir de una Gramática Libre de Contexto Hoy esta es una de la fases más fáciles de aplicar nGENERADORES DE ANALIZADORES LEXICOS Producen AL a partir de una especificación en Expres. Regulares. El AL resultante es un Autómata Finito nDISPOSITIVOS DE TRADUC. DIRIGIDA POR LA SINTAXIS Producen grupos de rutinas que recorren el árbol de AS generando código intermedio nGENERADORES AUTOMÁTICOS DE CÓDIGO Las proposiciones en cod. Int. se reemplazan por plan- tillas que representan secuencia de instruc. de máquina nDISPOSITIVOS PARA ANALISIS DE FLUJO DE DATOS Inf. sobre como los valores se transmiten de una parte a otra del programa HERRAMIENTAS PARA CONSTRUCCIÓN DE COMPIL.

33 Año Lex y YACC nHerramientas que nos permiten desarrollar componentes o la mayor parte de un compilador nSon un recurso invaluable para el profesional y el investigador nExisten paquetes freeware HERRAMIENTAS PARA CONSTRUCCIÓN DE COMPIL.

34 Año nCOMPILE- LINK- GO Se compilan segmentos por separado y luego se montan todos los objetos producidos en un módulo cargable listo nCOMPILADOR DE VARIAS PASADAS No es más lento. Ocupa poca memoria. Fácil de mantener nCOMPILADOR INCREMENTAL ( o interactivo) Se pueden compilar solo las modificaciones nAUTOCOMPILADOR Comp. escrito en el propio leng. que traduce. Portabilidad. nMETACOMPILADOR Programa al que se le especifica el lenguaje para el que se quiere un comp. y produce el comp. como resultado nDECOMPILADOR Traduce de código máquina a leng. de alto nivel ALGUNOS TIPOS ESPECIALES DE COMPILADORES

35 Año MODELO LENGUAJE CARACTERISTICAS Compilado Fortran, COBOL, Sintaxis rigurosa, C/C++, Pascal velocidad y tamaño Interpretado Lisp,AWK, BASIC, Desempeño lento. SQL Actividades no planea- das. Sintaxis relajadas Pseudocompilado Java Transportabilidad absoluta, desempeño intermedio. Sintaxis rigurosa EL LENGUAJE Y LA HERRAMIENTA

36 Año AREA BENEFICIOS nLenguaje de prog. Principios para su desarrollo Herramientas para implementación nInteligencia artificial Interfases de reconocimiento de lenguaje natural nSistemas operativos Desarrollo de interfases de control y usuario final. Intérpretes de comandos ( shells) nDiseño de interfaces Desarrollo de interf. orientadas a comando y carácter. Voz o escritura nAdministración de Selección de herramientas de proyectos inform. desarrollo. Evaluación de costo y beneficios. ASPECTOS ACADEMICOS Y DE INVESTIGACION


Descargar ppt "Año 20041 Introducción al Diseño de Compiladores ASIGNATURA: COMPILADORES."

Presentaciones similares


Anuncios Google