Compiladores: Fases, Funcionamiento y Herramientas
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 4,93 KB
Funcionamiento de un Autocompilador
Un autocompilador es un compilador escrito en el mismo lenguaje que compila.
Cuando se extiende el uso de un compilador entre muchas máquinas diferentes y se desea mejorar, el nuevo compilador se escribe con el antiguo. De esta manera, puede ser compilado por todas esas máquinas diferentes y da como resultado un compilador más potente de ese mismo lenguaje.
Definición de Metacompilador
Un metacompilador es un programa que acepta la descripción de un lenguaje y obtiene el compilador de dicho lenguaje. En otras palabras, acepta como entrada una gramática de un lenguaje y genera un autómata que reconoce cualquier sentencia del lenguaje. A este autómata podemos añadirle código para realizar el compilador.
Ejemplos: LEX, YACC, FLEX, Bison, JavaCC, PCCTS, MEDISE, etc.
Diferencia entre PCLEX y PCYACC
PCLEX es un metacompilador cuya función es generar un programa que es la parte del compilador que reconoce las palabras reservadas.
PCYACC es un metacompilador cuya función es generar un programa que es la parte del compilador que indica si una sentencia del lenguaje es válida o no.
Definición de Descompilador
Un descompilador pasa de un código máquina (o programa de salida) al lenguaje que lo generó (o programa fuente). Cada descompilador trabaja con un lenguaje de alto nivel concreto.
Fases de un Compilador
Un compilador se divide en dos partes principales:
- Una parte que analiza la entrada y genera estructuras intermedias.
- Otra parte que sintetiza la salida.
Objetivos de la Fase de Análisis
- Controlar la corrección del programa fuente.
- Generar estructuras necesarias para comenzar la síntesis.
Fases del Análisis
- Análisis Lexicográfico
- Análisis Sintáctico
- Análisis Semántico
Análisis Lexicográfico
Divide el programa fuente en los componentes básicos: números, identificadores de usuario (variables, constantes, tipos, nombres de procedimientos, etc.), palabras reservadas, signos de puntuación. A cada componente le asocia la categoría a la que pertenece.
Análisis Sintáctico
Comprueba que la estructura de los componentes básicos sea correcta según ciertas reglas gramaticales.
Análisis Semántico
Comprueba todo lo demás posible, es decir, todo lo relacionado con el significado: chequeo de tipos, rangos de valores, existencia de variables, etc.
Objetivo de la Fase de Síntesis
Construir el programa objeto deseado a partir de las estructuras generadas por la fase de análisis.
Fases de la Síntesis
- Generación de código intermedio
- Generación del código máquina
- Fase de optimización
Generación de Código Intermedio
Genera un código independiente de la máquina. Sus ventajas son que facilita la creación de pseudocompiladores y la optimización de código.
Generación de Código Máquina
Crea un fichero .exe
directamente o un fichero .obj
. Aquí también se puede hacer optimización propia del microprocesador.
Fase de Optimización
La optimización puede realizarse durante las fases de generación de código intermedio y/o generación de código máquina, y puede ser una fase aislada de éstas o estar integrada con ellas. La optimización del código intermedio debe ser independiente de la máquina.
Etapa Inicial o Front End
La etapa inicial comprende aquellas fases, o partes de fases, que dependen principalmente del lenguaje fuente y que son en gran parte independientes de la máquina objeto. Normalmente, se introducen los análisis léxicos y sintácticos, la creación de la tabla de símbolos, 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.
Etapa Final o Back End
La etapa final incluye aquellas partes del compilador que dependen de la máquina objeto y, en general, esas partes no dependen del lenguaje fuente, sino sólo del lenguaje intermedio. En la etapa final, se encuentran aspectos de la fase de optimización de código, además de la generación de código, junto con el manejo de errores necesario y las operaciones con la tabla de símbolos.
Tabla de Símbolos
La tabla de símbolos posee información sobre los identificadores definidos por el usuario, ya sean constantes, variables o tipos. Dado que puede contener información de diversa índole, debe hacerse de forma que no sea uniforme. Hace funciones de diccionario de datos y su estructura puede ser una tabla hash, un árbol binario de búsqueda, etc.