# Compilador compilador

El compilador compilador es una herramienta informática que crea un programa al analizar, interpretar o compilar desde algún tipo de descripción formal de un lenguaje al lenguaje del computador. La forma original y más extendida de compilador de computador es un generador de filtros, cuya entrada es una sintaxis (por lo general en BNF) de un lenguaje de programación y cuya salida es el código fuente de un programa de análisis, que a menudo se utiliza como componente de un compilador.
El compilador de computador ideal toma la descripción de un lenguaje de programación y una arquitectura de instrucciones fijada, y genera automáticamente un compilado de ellos. En la práctica, el estado de la técnica aún tiene que llegar a este grado de sofisticación y la mayoría de los generadores compiladores no son capaces de manejar arquitectura de información semántica o de destino.

## Variantes

Un programa de análisis típico asociado a un generador de código, ejecuta con cada una de las reglas de la gramática que deben ser ejecutadas cuando estas normas son aplicadas por el analizador. Estas piezas de código se refieren a veces a las rutinas de acción como semántica, ya que definen la semántica de la estructura sintáctica que es analizada por el analizador. Dependiendo del tipo de análisis que se debe generar, estas rutinas pueden construir un árbol de análisis (o AST) o generar código ejecutable directamente.
Algunos compiladores de computador experimentales toman como entrada una descripción formal de la semántica del lenguaje de programación, por lo general utilizando la semántica denotacional. Este enfoque es a menudo llamado «la semántica basada en la compilación», y fue iniciado por Peter Mosses Semantic Implementation System (SIS) en 1978. Sin embargo, los generados por el compilador y el código que producía eran ineficaces en el tiempo y el espacio. Actualmente no hay compiladores de producción que se construyan de esta forma, pero se continúa investigando sobre ellos.
La calidad de la producción compilador (PQCC) del proyecto en la Universidad Carnegie-Mellon se basa en no formalizar la semántica, pero tiene un marco semi-formal para la descripción de la máquina.
Existen en diferentes versiones de Compiladores de Computación, incluida la de reescribir los generadores de la máquina desde abajo hacia arriba (ver JBurg) para árboles de sintaxis baldosas en función de una reescritura de gramática para la generación de código, y constante de atributos generadores analizador de la gramática (por ejemplo, ANTLR puede ser utilizado para la comprobación de tipos simultánea, propagación, y más durante la fase de análisis).

## Historia

El primer compilador de computación que utilizó el nombre fue escrito por Tony Brooker en 1960 y se utilizó para crear los compiladores para el equipo Atlas en la Universidad de Mánchester, incluyendo el compilador Atlas Autocode. Sin embargo, fue bastante diferente de los compiladores modernos, y hoy probablemente se describe como algo entre un compilador genérico altamente personalizable y un lenguaje extensible de sintaxis. «Compilador compilador»: el nombre fue mucho más apropiado para el sistema de Brooker que para los compiladores de compilador más moderna, que se describe más exactamente como analizador de generadores.
Otros ejemplos de analizador de generadores son yacc, vein, se, ANTLR, Coco / R, CUP, GNU bison, Eli, FSL, SableCC y JavaCC.