Compilador

Diagrama a bloques de la operación de un compilador multilenguaje típico.

En informática, un compilador es un programa que traduce código escrito en un lenguaje de programación (llamado fuente) a otro lenguaje (conocido como objeto).[1]​ En este tipo de traductor el lenguaje fuente es generalmente un lenguaje de alto nivel y el objeto un lenguaje de bajo nivel, como assembly o código máquina.[2]​ Este proceso de traducción se conoce como compilación.[3]

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 y la síntesis del programa objeto.[4]: 3 

  • Análisis: se trata de la comprobación de la corrección del programa fuente, según la definición del lenguaje en términos de teoría de lenguajes formales. 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).[4]: 23 
  • 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[4]: 23  (en las que se busca obtener un programa objetivo lo más eficiente posible, según su complejidad computacional o complejidad de Kolmogórov: tiempo de ejecución, espacio durante ejecución, espacio para ser almacenado fuera de ejecución, etc.).

Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar en:

  • Analizador o front-end: es la parte que analiza el código fuente,[5]​ 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.
  • Generador o 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.[5]

Esta división permite que el mismo generador se utilice para crear el código máquina de varios lenguajes de programación distintos y que el mismo analizador que sirve para examinar el código fuente de un lenguaje de programación concreto sirva para producir código máquina en varias plataformas.

  1. Clocksin, William (1997). Clause and effect. Springer-Verlag. p. 93. ISBN 978-3-540-62971-9. Consultado el 10-10-2021. 
  2. Garrido Alenda, Alicia; Iñesta Quereda, José Manuel; Moreno Seco, Francisco; Pérez Ortiz, Juan Antonio (2002). «1». Diseño de compiladores. ISBN 978-84-7908-700-5. Archivado desde el original el 10 de octubre de 2021. Consultado el 10-10-2021. 
  3. Laborda, Javier; Josep Galimany, Rosa María Pena, Antoni Gual (1985). «Software». Biblioteca práctica de la computación. Barcelona: Ediciones Océano-Éxito, S.A. 
  4. a b c Grune, Dick; van Reeuwijk, Kees; Bal, Henri E.; Jacobs, Ceriel J.H.; Langendoen, Koen (2012). Modern Compiler Design (en inglés). Springer New York. ISBN 978-1-4614-4698-9. doi:10.1007/978-1-4614-4699-6. Consultado el 11 de octubre de 2021. 
  5. a b Hjort Blindell, Gabriel (2016). Instruction Selection (en inglés). Springer International Publishing. p. 4. ISBN 978-3-319-34017-3. doi:10.1007/978-3-319-34019-7. Consultado el 12 de febrero de 2022. 

From Wikipedia, the free encyclopedia · View on Wikipedia

Developed by Tubidy