0 calificaciones0% encontró este documento útil (0 votos)
6 vistas22 páginas
El documento describe los procesos internos de los compiladores y traductores para ejecutar código de instrucciones. Explica las diferentes fases de un compilador como el análisis léxico, sintáctico, semántico, generación de código intermedio, optimización de código y generación de código objeto. También describe los intérpretes, intérpretes de línea de comandos, ensambladores y la tabla de símbolos utilizada por los compiladores.
El documento describe los procesos internos de los compiladores y traductores para ejecutar código de instrucciones. Explica las diferentes fases de un compilador como el análisis léxico, sintáctico, semántico, generación de código intermedio, optimización de código y generación de código objeto. También describe los intérpretes, intérpretes de línea de comandos, ensambladores y la tabla de símbolos utilizada por los compiladores.
El documento describe los procesos internos de los compiladores y traductores para ejecutar código de instrucciones. Explica las diferentes fases de un compilador como el análisis léxico, sintáctico, semántico, generación de código intermedio, optimización de código y generación de código objeto. También describe los intérpretes, intérpretes de línea de comandos, ensambladores y la tabla de símbolos utilizada por los compiladores.
INSTRUCCIONES INTERPRETES • Un intérprete es un programa informático que procesa el código fuente de un proyecto de software durante su tiempo de ejecución, es decir, mientras el software se está ejecutando, y actúa como una interfaz entre ese proyecto y el procesador. Un intérprete siempre procesa el código línea por línea, de modo que lee, analiza y prepara cada secuencia de forma consecutiva para el procesador. INTERPRETE DE COMANDOS • Un intérprete de línea de comandos, o CLI, es un programa que los usuarios de computadoras utilizan para ejecutar comandos de texto.
¿Cómo funciona el intérprete de línea de comandos?
Los usuarios ingresan los comandos a través del teclado.
Luego, el intérprete de la línea de comandos convierte los comandos en funciones o llamadas al sistema. El SO recibe y ejecuta las respectivas llamadas. Que es un compilador Un compilador es un tipo de traductor que transforma un programa entero de un lenguaje de programación (llamado código fuente) a otro. Usualmente el lenguaje objetivo es código máquina, aunque también puede ser traducido a un código intermedio (bytecode) o a texto. PARTES DE UN COMPILADOR La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente la síntesis del y programa objeto. Análisis • Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis léxico (que consiste en la descomposición del programa fuente en componentes léxicos), Análisis sintáctico (agrupación de los componentes léxicos en frases gramaticales) y Análisis semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico). Síntesis • Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible). Front-end y Back-end: • Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases comprendidas entre el Análisis Léxico y la Generación de Código Intermedio.
• Back-end: es la parte que genera el código máquina, específico de
una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End. Tipos de Compiladores • Compiladores cruzados • Compiladores optimizadores • Compiladores de una sola pasada • Compiladores de varias pasadas • Compiladores JIT (just in time) Proceso de compilación ENSAMBLADORES Y MACROENSAMBLADORES
• Ensambladores: Son aquellos que
permanecen en la memoria principal de la computadora y cargan, para su ejecución, al programa objeto producido. • Macroensambladores: Son ensambladores que permiten el uso de macroinstrucciones. CONSTRUCCION SISTEMATICA DE COMPILADORES Con frecuencia, las fases anteriores se agrupan en una etapa inicial (frontend) y una etapa final (back- end). La etapa inicial comprende aquellas fases, o partes de fases, que dependen exclusivamente del lenguaje fuente y que son independientes de la máquina para la cual se va a generar el código. En la etapa inicial se integran los análisis léxicos y sintácticos, el análisis semántico y la generación de código intermedio. La etapa inicial también puede hacer cierta optimización de código e incluye además, el manejo de errores correspondiente a cada una de esas fases. TABLA DE SIMBOLOS •Las operaciones básicas que debe poseer son: •• crear(): crea una tabla vacía. •• insertar(simbolo): añade a la tabla el símbolo dado. •• buscar(nombre): devuelve el símbolo cuyo nombre coincide con el •parámetro. Si el símbolo no existe devuelve null. •• imprimir(): a efectos informativos, visualiza por la salida estándar la lista de variables almacenadas en la tabla de símbolos junto con sus valores asociados. Análisis léxico Análisis sintáctico FASES DE UN Análisis semántico COMPILA Generación de código intermedio DOR Optimización del código Generación de código • El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (tokenes), que son secuencias de caracteres que tienen un Análisis significado. Además, todos los espacios en blanco, líneas en blanco, comentarios léxico y demás información innecesaria se elimina del programa fuente. También se comprueba que los símbolos del lenguaje (palabras claves, operadores etc.) se han escrito correctamente. • En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases gramaticales que el compilador utiliza para sintetizar la Análisis salida. Se comprueba si lo obtenido de la fase anterior es sintácticamente correcto sintáctico (obedece a la gramática del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante un árbol de análisis sintáctico. • La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En Análisis semántic ella se utiliza la estructura jerárquica o determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones. • Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita del programa fuente. Se puede considerar esta representación Generación de códig intermedia como un programa para una o intermedio maquina abstracta. Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto. • La fase de optimización de código consiste en mejorar el código intermedio, de modo que resulte un código máquina Optimación de códi más rápido de ejecutar. Esta fase de la go etapa de síntesis es posible sobre todo si el traductor es un compilador (difícilmente un intéprete puede optimizar el código objeto). • La fase final de un compilador es la generación de código objeto, que por lo general consiste en código máquina reubicable o código ensamblador. Cada una Generación de códig de las variables usadas por el programa se o traduce a una dirección de memoria (esto también se ha podido hacer en la fase de generación de código intermedio). Gestión de memoria en tiempos de ejecución • Cuando un programa se ejecuta sobre un sistema operativo existe un proceso previo llamado cargador que suministra al programa un bloque contiguo de memoria sobre el cual ha de ejecutarse. El programa resultante de la compilación debe organizarse de forma que haga uso de este bloque. Para ello el compilador incorpora al programa objeto el código necesario. FIN