190 likes | 478 Views
Lenguajes de Programación. 1.3 Compiladores e Intérpretes. Berenice de los Ángeles Fernández Abarca Marzo 2005. Análisis Léxico, Sintáctico y Semántico.
E N D
Lenguajes de Programación 1.3 Compiladores e Intérpretes Berenice de los Ángeles Fernández Abarca Marzo 2005
Análisis Léxico, Sintáctico y Semántico • Análisis Léxico (lineal o exploración). Consiste en descomponer el programa fuente en secuencias de caracteres con significado especial (componentes léxicos). Aísla los símbolos, identifica su tipo, y guarda su información en una tabla de símbolos.
Análisis Léxico, Sintáctico y Semántico • Componentes Léxicos en un lenguaje de programación: palabras clave, operadores, identificadores, constantes, cadenas literales y signos de puntuación.
Análisis Léxico, Sintáctico y Semántico = < Inicio 0 0 0 0 1 2 • Diagrama de transiciones. > 0 3 = 0 5 > 0 0 7 6 =
Análisis Léxico, Sintáctico y Semántico • Análisis Sintáctico (Jerárquico). Agrupa los componentes léxicos en frases gramaticales. • El analizador sintáctico comprueba si una cadena dada en el programa fuente, puede o no ser generada por la gramática del lenguaje fuente.
Análisis Léxico, Sintáctico y Semántico • Análisis descendente. Construye el árbol sintáctico de la raíz a las hojas. • Por descenso recursivo. Se busca una derivación por la izquierda para una cadena de entrada. • Predictivo. Dado el símbolo actual de entrada y el no terminal a expandir, se analiza cual de las reglas de producción tiene una cadena que comience con el símbolo. • Predictivo no recursivo. Mantiene la pila explícitamente, en lugar de hacer llamadas recursivas.
Análisis Léxico, Sintáctico y Semántico • Análisis Sintáctico ascendente. Se construye el árbol sintáctico de las hojas hacia la raíz. • Análisis por reducción y desplazamiento. Se reduce la cadena de entrada cambiando le lado derecho de una regla de producción por el lado izquierdo, hasta llegar al símbolo de inicio de la gramática. • Análisis por precedencia de operadores. • LR.
Análisis Léxico, Sintáctico y Semántico • Análisis Semántico. Se analiza que el programa fuente tenga un significado. Dicho significado se obtiene de las estructuras sintácticas encontradas, y los símbolos definidos en la tabla de símbolos
Generación de código, ejecución e interpretación • Si el programa fuente no presenta errores en el análisis sintáctico, y semántico, se genera un código intermedio. • Si el programa hace referencia a módulos o rutinas fuera del programa fuente, se hace el enlace con estos componentes, generando el código objeto.
Implementación: compilación, interpretación e implementación híbrida Las formas de implementar un lenguaje de alto nivel son: • Compilador • Intérprete • Implementación Híbrida
Implementación: compilación, interpretación e implementación híbrida El compilador es un programa que lee un código fuente, escrito en un lenguaje, llamado lenguaje fuente, y lo traduce en un programa equivalente en otro lenguaje, llamado lenguaje objeto. Programa Fuente Programa Objeto Compilador Mensajes de Error
Implementación: compilación, interpretación e implementación híbrida El compilador realiza la traducción de un programa fuente en un programa objeto en 2 fases: • Análisis. Divide el programa fuente en sus elementos componentes y crea una representación intermedia. • Síntesis. Construye el programa objeto a partir de la representación intermedia.
Implementación: compilación, interpretación e implementación híbrida Programa Fuente Analizador Léxico Cadena de C. Léxicos Analizador Sintáctico Árbol Sintáctico Analizador Semántico Administrador de la tabla de símbolos Árbol Sintáctico Abstracto Manejador de Errores Generador de Código Intermedio Código Intermedio Optimizador de Código Código Modificado Generador de Código Programa Objeto
Implementación: compilación, interpretación e implementación híbrida El intérprete es un programa que simula una máquina que entiende el lenguaje de alto nivel. Dicho intérprete, simula el programa que está siendo interpretado. Programa Fuente Salida Intérprete Mensajes de Error
Implementación: compilación, interpretación e implementación híbrida La implementación híbrida, traduce un programa fuente en un programa objeto, que sirve como entrada a un intérprete. Programa Objeto Programa Fuente Salida Compilador Intérprete Mensajes de Error Mensajes de Error
Implementación: compilación, interpretación e implementación híbrida