Hernandez_Hernandez_Practica web de la sesion 12.pptx
Compilador2
1. compilador Fases y los aspectos formales Curso: Compilador I Alumno: José Antonio Calzada Meza Unv. José Carlos Mariátegui
2. Índice Ambiente de compilación, fases de un compilador. Analizador Léxico, Analizador Sintáctico, análisis semántico, generación de código, tratamiento de errores Aspectos formales, definiciones, alfabeto, símbolos, cadena de palabras, frase. Gramática o Sintaxis, producciones, símbolos terminales, símbolos no terminales. Gramática formal, árboles de derivación sintáctica
3. Ambiente de compilación, fases de un compilador Preparación del ambiente Naturalmente, antes de que comience cualquier trabajo de migración, necesitas disponer de todas las herramientas y bibliotecas necesarias con las que compilar. En esta sección se explicará cómo recopilar el software y cómo configurar tu sistema para compilar y ejecutar aplicaciones con el entorno GNOME 2. fases de un compilador Análisis Léxico Análisis Sintáctico Análisis Semántico Generación de Código Intermedio Optimización de Código
4. Analizador Léxico Programa Lenguaje Fuente Análisis Léxico (Token, Lexemaa Mensaje de Error Lee los caracteres del programa fuente de izquierda a derecha, y los agrupa en tokens
23. Así la las peculiaridades en el alfabeto de entrada
24.
25. El papel del analizador sintáctico Obtieneunacadena de tokens desde el analizadorléxico y verificaqueestacadenapueda ser generadapor la gramática del lenguaje de programación definido. Árbol de análisis sintáctico Token Analizador Sintáctico Programa Fuente Analizador Léxico ObtenToken() Resto del análisis Tabla de Símbolos
26. El papel del analizador sintáctico Conceptualmente, el analizador sintáctico, a partir de cadenascorrectas de tokens, construye un arbol de análisis sintáctico quetransfiere a lasetapasposteriores del compilador.
27.
28. Bottom-Up.- Construyeárboles de análisis sintáctico a partir de lashojas y hacia la raiz.En ambos casos la entradaesexplorada de izquierda a derecha, un símbolo a la vez.
29.
30.
31.
32. No puedes utilizar una GLC para describir que alguna palabra particulares aparezca dos veces en una cadena separada por un texto en medio.
53. Requiere muchas operaciones de intercambio y copia (swap, copy) Ejemplo: JVM (Java Virtual Machine)
54. Selección de Instrucciones Si una instrucción de asignación de la forma x=y+z; Se traduce a: LD R0, y // R0 = y ADD R0, R0, z // R0 = R0+z ST x, R0 // x = R0 Como se traducen: a = b + c; d = a + c; a = a + 1; Que se puede optimizar? Cada instrucción de la máquina tiene un costo asociado
58. Optimización Local Reducción usando Identidades Algebraicas: Ejemplo: a = b + c; b = b – d; c = c + d; d = b + c; Y se puede optimizar a: a = b + c; b = b – d; c = c + d; d = a;
60. Aspectos formales, definiciones, alfabeto, símbolos, cadena de palabras, frase Alfabeto: es un conjunto finito y no vacío de elementos llamados símbolos o letras. Una palabra o cadena sobre un alfabeto V es una cadena finita de símbolos del alfabeto. Notación: denota a una cadena de longitud 0, también conocida como palabra vacía. Vndenota al conjunto de todas las palabras de longitud n sobre V V denota al conjunto de todas las cadenas de cualquier longitud sobreV. V+ denota al conjunto de todas las cadenas de cualquier longitud sobre V, excepto la vacía. Un elemento de Vnes una cadena del tipo a1a2 : an donde cada ai2 V.
61. Aspectos formales, definiciones, alfabeto, símbolos, cadena de palabras, frase Símbolos: Una tabla de símbolos es una estructura de datos que contiene un registro por cada identificador, con los campos para los atributos del identificador. La estructura de datos permite encontrar rápidamente el registro de cada identificador y almacenar o consultar rápidamente datos en un registroCuando el analizador léxico detecta un identificador en el programa fuente, el identificador se introduce en la tabla de símbolos. Sin embargo, normalmente los atributos de un identificador no se pueden determinar durante el análisis léxico. Por ejemplo, en una declaración en Pascal como: var posición, inicial, velocidad : real;
62. Aspectos formales, definiciones, alfabeto, símbolos, cadena de palabras, frase Cadena o palabras: Secuencia finita de símbolos de un alfabeto. Ejemplo: XYZ, CASA son cadenas del alfabeto español y también del inglés pero XYZ no lo es del portugués. Frase: Secuencia de símbolos o cadenas. Ejemplos: Sobre el alfabeto español El río es azul María
63. Gramática o Sintaxis Conjunto de reglas que definen si una frase forma parte del lenguaje (es decir si está correcta o no). Si la frase está correcta entonces será aceptada por el lenguaje. Ejemplos: Considerando las reglas sintácticas del español, frases aceptadas por el lenguaje español : El gato es negro Gato Negro Frases no aceptadas : Está robó el negro el gato
64. Gramática o Sintaxis Para especificar las reglas de la gramática se usan las producciones. Producciones : Son las reglas que definen como generar frases válidas de un lenguaje. Tienen la forma: A -> B Se lee : A está definido por Bó A puede ser sustituido por B ó Bpuede derivarse deA. Normalmente se usan los símbolos -> y := para especificar la transformación que originará las unas variables
65. Producciones : Una producción contiene: Un lado izquierdo (A) que representa la cadena que va a transformarse (Lo que se define). Un lado derecho (B) que representa la cadena resultante de la transformación (La definición). Ejemplo: Oración ->->-> Sujeto Verbo Predicado ó Oración ::= Sujeto Verbo Predicado N -> 10 ó N ::= 1
66. Símbolos terminales : Son las cadenas que realmente aparecen en una frase. Nunca aparecen del lado izquierdo de una producción. Para la producción N -> 10 ; 10 es un símbolo terminal. La producción Oración -> Sujeto Verbo Predicado no tiene símbolos terminales T denota el conjunto de símbolos terminales de un lenguaje
67. Símbolos no terminales : Conocidos también como categorías sintácticas, no pertenecen a T y deben ser definidos en una producción, es decir deben aparecer por lo menos una vez del lado izquierdo de una producción. Representan los estados intermedios en el proceso de generación de un lenguaje. en el proceso de generación de un lenguaje. La producción N -> 10 ; Define el símbolo no terminal N La producción Oración -> Sujeto Verbo Predicado Define el símbolo no terminal Oración como Sujeto seguido de un Verbo y luego de un Predicado
68. Símbolos no terminales : N denota el conjunto de todos los símbolos no terminales del lenguaje. Para que el lenguaje esté bien definido es necesario que todos los símbolos no terminales tengan su definición en el conjunto de producciones. Podemos decir que un lenguaje L es el conjunto de todas las combinaciones de cadenas que se forman de acuerdo a las reglas gramaticales (conjunto de producciones del lenguaje). S denota el símbolo no terminal inicial, que representa el punto de partida de la gramática.
69. El conjunto de producciones (P) define todas las reglas para formación de frases válidas del lenguaje y podemos considerarlo la Gramática de un lenguaje. Cualquier frase válida del lenguaje tiene que ser generada a través del uso de las producciones y se dice que pertenece al lenguaje. Una frase que no es generada por el uso de las producciones o es generada por la aplicación inválida de las producciones, se considera una frase inválida se dice que no pertenece al lenguaje.
70. El conjunto de producciones (P) Se podría completar la definición del ejemplo anterior: Sujeto -> Perro Verbo -> Ladra Predicado -> Fuerte Podemos ahora decir que: T = { Perro, Ladra, Fuerte} N = { Oración, Sujeto, Verbo, Predicado } La frase Perro Ladra Fuerte pertenece al lenguaje La frase Ladra Perro Fuerte no pertenece al lenguaje
73. P es el conjunto de produccionesP es el conjunto de producciones S ∈ N es el símbolo inicial Cada gramática G caracteriza (genera) un lenguaje, decimos por tanto que un lenguaje formal se asocia a una gramática: L(G) = L(T, N, P, S)
76. ejemplo Sea G2= (T, N, P, Bloque) donde T = { Begin, End, C, ; } N = { Bloque, Cuerpo, Lista, Comando} P = {Bloque -> Begin Cuerpo End , Cuerpo -> Lista ε , Lista -> Lista; Comando Comando ,Comando -> C } Frases válidas: BeginEnd Begin C; C End
77. Árboles de derivación o sintácticos Muestra gráficamente como desde el no terminal S se deriva una cadena del lenguaje. Para la producción inicial: A -> C D F La raíz del árbol sería A con tres hijos C, D y F de izquierda a derecha y luego cada símbolo no terminal ni debe ser sustuido (usando una producción cuyo lado izquierdo sea justamente ni). El proceso se repetirá en cada nodo del árbol hasta llegar a símbolos terminales (Hojas del árbol) A C D F
79. Árboles de derivación Para G2 la frase Begin C; C End tiene el siguiente árbol de derivació
80. Derivaciones Se dice que una cadena αn se puede derivar de α0 si y sólo si existe la secuencia de cadenas α0, α1, α2,.. Αn tal que cada αi puede derivarse directamente de αi-1 (existe αi-1 -> αi): α0 -> α1 -> α2 -> …. -> αi-1 -> αi -> … -> αn Podemos abreviar con el símbolo ->* conocido como cerradura transitiva reflexiva de -> α0 ->* αn (αi-1 -> αi , i = 1, 2, .., n)