compiladorFases y los aspectos formalesCurso: Compilador IAlumno: José Antonio Calzada MezaUnv. José Carlos Mariátegui
Í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
 Ambiente de compilación, fases de un compiladorPreparación del ambienteNaturalmente, 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 compiladorAnálisis LéxicoAnálisis SintácticoAnálisis SemánticoGeneración de Código IntermedioOptimización de Código
 Analizador LéxicoPrograma LenguajeFuenteAnálisis Léxico(Token, LexemaaMensaje de ErrorLee los caracteres del programa fuente deizquierda a derecha, y los agrupa en tokens
Funciones del Analizador LéxicoConvierte el programa fuente en una cadena de tokens Para reconocer el token usa un patrón, una regla que describe como se forman las cadenas que corresponden a un token.
Salta comentarios y espacios en blanco (tabuladores, saltos de línea...)
Tener el registro de la línea del archivo fuente que esta siendo analizada
Genera mensajes de error léxico, y se recupera del error
Convierte los valores literales al tipo que corresponda
Si la entrada debe obedecer a un formato, verifica elformato Ej. Fortran, Cobol
Tokens y LexemasToken:Elemento básico del lenguaje
Unidad léxica indivisible
Identifica una entidad lógica dentro del lenguaje
Incluyen: Palabras Reservadas, Constantes, Operadores,
Signos de Puntuación e IdentificadoresLexema:La cadena original que se identifica como token
No hay correspondencia 1-1 entre token-lexemaTokens y Lexemas: Ejemplos
Porque se divide el Análisis Léxicodel Sintáctico?Simplifica y modulariza el diseño del compilador, se hace mas claro, facilita la implementación
Mejora la eficiencia del compilador:
El par ser trabaja con Tokens, no con caracteres
Uso de técnicas de buffers
La mayor parte del tiempo de compilación se usa en el análisis léxico (excluyendo la optimización)
Mayor portabilidad:
Así la las peculiaridades en el alfabeto de entrada
Ej. El conjunto de caracteres, representación de símbolosAnálisis sintáctico
El papel del analizador sintácticoObtieneunacadena de tokens desde el analizadorléxico y verificaqueestacadenapueda ser generadapor la gramática del lenguaje de programación definido.Árbol deanálisissintácticoTokenAnalizadorSintácticoProgramaFuenteAnalizadorLéxicoObtenToken()‏Resto del análisisTabla de Símbolos
El papel del analizador sintácticoConceptualmente, el analizador sintáctico, a partir de cadenascorrectas de tokens, construye un arbol de análisis sintáctico quetransfiere a lasetapasposteriores del compilador.
El papel del analizador sintácticoDe acuerdo a lo anterior, existen dos tipos de analizadoressintácticos:Top-Down.- Construyeárboles de análisis sintáctico a partir de la raiz y hacialashojas.
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.
Manejo de erroressintácticosEl analizador sintáctico debe ser capaz de reconocererroresqueimpidenformarfrasesgramaticalesválidasparanuestrolenguaje de programación. Ejemplos de erroressintácticostípicos son:La ausencia o exceso de un delimitadorcomolasllaves de C (“{“ o “}”).
Unasentenciacondicionalif con la ausencia de la palabra clave then en Pascal.Manejo de erroressintácticosPara recupararse de los erroressintácticosexistenlassiguientesestrategias:Modo de pánico.- El analizadordescartasucesivamentesímboloshastaencontrar un token de sincronizaciónválido (generalmente un delimitadorcomo el “;” o “}”).
Recuperación a nivel de frase.- El analizadorintentaremplazar un prefijo de la entradarestanteporunacadenaquepermita al analizadorcontinuar (cambiaruna “,” por un “;”, insertar un “;”, etc.).Por qué necesitamos el análisis semánticoEl analizador sintáctico no puede detectar todos los errores.Algunos constructores del lenguaje no son libres de contextoEjemplo: declaración de identificadores y su uso.
No puedes utilizar una GLC para describir que alguna palabra particulares aparezca dos veces en una cadena separada por un texto en medio.
Una versión abstracta del problema es:			{wcw | w  (a | b)* }declaraciónuso
¿Qué hace el análisis semántico?Verificaciones de varias clases, típicamente:Que todos los identificadores estén declarados.
Los tipos de las expresiones y la compatibilidad de las asignaciones.
Invocación de métodos compatibles con las declaraciones
etc …
Los requerimientos dependes del lenguaje.Generación de CódigoRepresentaciónIntermediaPrograma TraducidoAl lenguaje destinoGenerador de CódigoTabla de SímbolosMantener la semántica del programa
 El programa traducido debe tener alta calidad:
 Uso efectivo de los recursos
 Correr eficientemente = “buen código” (generar la
traducción óptima es un problema indecidible)
 Producir código correctoGenerador de CódigoConjuntos de instrucciones y arquitecturas demáquina usuales: RISC (ReducedInstruction Set)

Compilador2

  • 1.
    compiladorFases y losaspectos formalesCurso: Compilador IAlumno: José Antonio Calzada MezaUnv. José Carlos Mariátegui
  • 2.
    Índice Ambiente decompilació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 decompilación, fases de un compiladorPreparación del ambienteNaturalmente, 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 compiladorAnálisis LéxicoAnálisis SintácticoAnálisis SemánticoGeneración de Código IntermedioOptimización de Código
  • 4.
    Analizador LéxicoProgramaLenguajeFuenteAnálisis Léxico(Token, LexemaaMensaje de ErrorLee los caracteres del programa fuente deizquierda a derecha, y los agrupa en tokens
  • 5.
    Funciones del AnalizadorLéxicoConvierte el programa fuente en una cadena de tokens Para reconocer el token usa un patrón, una regla que describe como se forman las cadenas que corresponden a un token.
  • 6.
    Salta comentarios yespacios en blanco (tabuladores, saltos de línea...)
  • 7.
    Tener el registrode la línea del archivo fuente que esta siendo analizada
  • 8.
    Genera mensajes deerror léxico, y se recupera del error
  • 9.
    Convierte los valoresliterales al tipo que corresponda
  • 10.
    Si la entradadebe obedecer a un formato, verifica elformato Ej. Fortran, Cobol
  • 11.
    Tokens y LexemasToken:Elementobásico del lenguaje
  • 12.
  • 13.
    Identifica una entidadlógica dentro del lenguaje
  • 14.
    Incluyen: Palabras Reservadas,Constantes, Operadores,
  • 15.
    Signos de Puntuacióne IdentificadoresLexema:La cadena original que se identifica como token
  • 16.
    No hay correspondencia1-1 entre token-lexemaTokens y Lexemas: Ejemplos
  • 17.
    Porque se divideel Análisis Léxicodel Sintáctico?Simplifica y modulariza el diseño del compilador, se hace mas claro, facilita la implementación
  • 18.
    Mejora la eficienciadel compilador:
  • 19.
    El par sertrabaja con Tokens, no con caracteres
  • 20.
  • 21.
    La mayor partedel tiempo de compilación se usa en el análisis léxico (excluyendo la optimización)
  • 22.
  • 23.
    Así la laspeculiaridades en el alfabeto de entrada
  • 24.
    Ej. El conjuntode caracteres, representación de símbolosAnálisis sintáctico
  • 25.
    El papel delanalizador sintácticoObtieneunacadena de tokens desde el analizadorléxico y verificaqueestacadenapueda ser generadapor la gramática del lenguaje de programación definido.Árbol deanálisissintácticoTokenAnalizadorSintácticoProgramaFuenteAnalizadorLéxicoObtenToken()‏Resto del análisisTabla de Símbolos
  • 26.
    El papel delanalizador sintácticoConceptualmente, el analizador sintáctico, a partir de cadenascorrectas de tokens, construye un arbol de análisis sintáctico quetransfiere a lasetapasposteriores del compilador.
  • 27.
    El papel delanalizador sintácticoDe acuerdo a lo anterior, existen dos tipos de analizadoressintácticos:Top-Down.- Construyeárboles de análisis sintáctico a partir de la raiz y hacialashojas.
  • 28.
    Bottom-Up.- Construyeárboles deaná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.
    Manejo de erroressintácticosElanalizador sintáctico debe ser capaz de reconocererroresqueimpidenformarfrasesgramaticalesválidasparanuestrolenguaje de programación. Ejemplos de erroressintácticostípicos son:La ausencia o exceso de un delimitadorcomolasllaves de C (“{“ o “}”).
  • 30.
    Unasentenciacondicionalif con laausencia de la palabra clave then en Pascal.Manejo de erroressintácticosPara recupararse de los erroressintácticosexistenlassiguientesestrategias:Modo de pánico.- El analizadordescartasucesivamentesímboloshastaencontrar un token de sincronizaciónválido (generalmente un delimitadorcomo el “;” o “}”).
  • 31.
    Recuperación a nivelde frase.- El analizadorintentaremplazar un prefijo de la entradarestanteporunacadenaquepermita al analizadorcontinuar (cambiaruna “,” por un “;”, insertar un “;”, etc.).Por qué necesitamos el análisis semánticoEl analizador sintáctico no puede detectar todos los errores.Algunos constructores del lenguaje no son libres de contextoEjemplo: declaración de identificadores y su uso.
  • 32.
    No puedes utilizaruna GLC para describir que alguna palabra particulares aparezca dos veces en una cadena separada por un texto en medio.
  • 33.
    Una versión abstractadel problema es: {wcw | w  (a | b)* }declaraciónuso
  • 34.
    ¿Qué hace elanálisis semántico?Verificaciones de varias clases, típicamente:Que todos los identificadores estén declarados.
  • 35.
    Los tipos delas expresiones y la compatibilidad de las asignaciones.
  • 36.
    Invocación de métodoscompatibles con las declaraciones
  • 37.
  • 38.
    Los requerimientos dependesdel lenguaje.Generación de CódigoRepresentaciónIntermediaPrograma TraducidoAl lenguaje destinoGenerador de CódigoTabla de SímbolosMantener la semántica del programa
  • 39.
    El programatraducido debe tener alta calidad:
  • 40.
    Uso efectivode los recursos
  • 41.
    Correr eficientemente= “buen código” (generar la
  • 42.
    traducción óptima esun problema indecidible)
  • 43.
    Producir códigocorrectoGenerador de CódigoConjuntos de instrucciones y arquitecturas demáquina usuales: RISC (ReducedInstruction Set)