Agrupación de fases en el diseño del compilador

Un compilador es un software que traduce un lenguaje de alto nivel a un formato comprensible por máquina. Por lo general, un compilador se compone de seis estados y el código de entrada en lenguaje de alto nivel, también conocido como código fuente, pasa a través de cada estado uno por uno, cada estado procesa el código, lo que da como resultado un código comprensible para la máquina o un código objeto. .  

Estos seis estados del compilador se dividen además en fases sobre la base del compilador de un paso o de dos pasos, el estado es el siguiente:

  1. Análisis léxico
  2. Análisis de sintaxis
  3. Análisis Semántico
  4. Generación de código intermedio
  5. Optimización de código
  6. Codigo de GENERACION

Fases en el compilador:

Generalmente, las fases se dividen en dos partes:

1. Fases de front-end: el front-end consta de aquellas fases o partes de fases que dependen del idioma de origen y de la máquina de destino, son independientes. Estos generalmente consisten en análisis léxico , análisis semántico , análisis sintáctico , creación de tablas de símbolos y generación de código intermedio . Una pequeña parte de la optimización del código también se puede incluir en la parte frontal. La parte frontal también incluye el manejo de errores que acompaña a cada una de las fases.

Front End phases

Fases frontales

2. Fases de back-end: las partes de los compiladores que dependen de la máquina de destino y no dependen del idioma de origen se incluyen en el back-end. En el back-end, también se incluyen la generación de código y las características necesarias de las fases de optimización de código, junto con el manejo de errores y las operaciones de la tabla de símbolos.

Back End Phases

Fases de back-end

Pasa en compilador:

Un pase es un componente donde se combinan partes de una o más fases del compilador cuando se implementa un compilador. Un pase lee o escanea las instrucciones del programa fuente o la salida producida por el pase anterior, lo que hace necesaria la transformación especificada por sus fases.

Generalmente hay dos tipos de pases

  1. Un pase
  2. dos pases

Agrupamiento

Varias fases se agrupan en un pase para que pueda leer el archivo de entrada y escribir un archivo de salida.

  1. One-Pass: en One-pass, todas las fases se agrupan en una fase. Las seis fases se incluyen aquí en un solo paso.
  2. Two-Pass: en Two-pass, las fases se dividen en dos partes, es decir, la parte de análisis o front-end del compilador y la parte de síntesis o parte de back-end del compilador.

Propósito del compilador One Pass

One Pass Compiler

Compilador de un paso

Un compilador de un solo paso genera una estructura de instrucciones de la máquina que parece un flujo de instrucciones y luego se resume con la dirección de la máquina para estas pautas en un resumen de las instrucciones que se actualizarán una vez que se genere la dirección de la máquina. Se utiliza para pasar el programa por una vez. Cada vez que se maneja la fuente de línea, se verifica y se elimina el token. 

Propósito del compilador de dos pasos

Two-Pass Compiler

Compilador de dos pasos

Un compilador de dos pasos utiliza su primer paso para ingresar a su tabla de símbolos un resumen de identificadores junto con las áreas de memoria a las que se relacionan estos identificadores. Luego, en ese punto, una segunda pasada reemplaza los códigos de operación mnemotécnica por su equivalente en lenguaje de máquina y reemplaza los usos de identificadores por su dirección de máquina. En el segundo paso, el compilador puede leer el documento de resultado entregado por el primer paso, ensamblar el árbol sintáctico y entregar el examen sintáctico. El resultado de esta etapa es un registro que contiene el árbol sintáctico.

Reducción del número de pases

Las diversas fases del compilador deben agruparse por razones válidas: la agrupación en una sola fase hace que el arreglo sea más rápido ya que no se espera que el compilador pase a varios módulos o fases para obtener la demanda de introducción de interacción. Reducir el número de pases es inversamente proporcional a medida que aumenta la eficacia del tiempo para leer y escribir en archivos intermedios. Al agrupar las fases en una sola pasada, todo el programa debe mantenerse en la memoria para garantizar un flujo de datos adecuado para cada fase, ya que una fase puede requerir datos en una solicitud inesperada en comparación con los datos entregados en la fase anterior. La representación interna del programa de origen o del programa de destino es diferente. Por lo tanto, la estructura interna de la memoria puede ser más grande que las entradas y salidas.

Publicación traducida automáticamente

Artículo escrito por swarnavo09 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *