Cuando una empresa desarrolla un compilador para un lenguaje fuente y un lenguaje objeto determinados, normalmente no es el único compilador que la empresa piensa desarrollar; es más muchos fabricantes de microprocesadores tienen una división de dedicada a desarrollar compiladores para los nuevos chips que construya.

Cuando el número de lenguaje fuente crece hasta un número grande M, y/o cuando el número de lenguajes objeto también crece hasta un número grande N, es necesario encontrar una técnica para evitar tener que diseñar M x N compiladores. La solución consiste en utilizar un lenguaje intermedio o una representación intermedia; de esta forma sólo hay que construir M programas que traduzcan de cada lenguaje fuente al lenguaje intermedio (los front ende), y N programas que traduzcan del lenguaje intermedio a cada lenguaje objeto (los back end).

La matemática (del lat. mathematĭca,

y este del gr. τὰ μαθηματικά, derivado de μάθημα, conocimiento) es una ciencia formal que estudia las propiedades y las relaciones que se pueden establecer entre los entes abstractos, como los símbolos, los números y las figuras geométricas.[1]

Aunque la matemática sea la supuesta “Reina de las Ciencias”, algunos matemáticos no la consideran una ciencia natural. Principalmente, los matemáticos definen e investigan estructuras y conceptos abstractos por razones puramente internas a la matemática, debido a que tales estructuras pueden proveer, por ejemplo, una generalización elegante, o una herramienta útil para cálculos frecuentes. Además, muchos matemáticos consideran la matemática como una forma de arte en vez de una ciencia práctica o aplicada. Sin embargo, las estructuras que los matemáticos investigan frecuentemente sí tienen su origen en las ciencias naturales, y muchas veces encuentran sus aplicaciones en ellas, particularmente en la física.

No existe un único lenguaje intermedio en todos los compiladores, sino que cada empresa que diseña compiladores suele tener su propio lenguaje intermedio. La utilización de un lenguaje intermedio permite construir en, mucho menos tiempo un compilador para otra máquina y también permite construir compiladores para otros lenguajes fuente generando códigos para la misma máquina. La matemática es un arte, pero también una ciencia de estudio. Informalmente, se puede decir que es el estudio de los “números y símbolos”. Es decir, es la investigación de estructuras abstractas definidas a partir de axiomas, utilizando la lógica y la notación matemática. Es también la ciencia de las relaciones espaciales y cuantitativas. Se trata de relaciones exactas que existen entre cantidades y magnitudes, y de los métodos por los cuales, de acuerdo con estas relaciones, las cantidades buscadas son deducibles a partir de otras cantidades conocidas o presupuestas.

Véase también: Filosofía de la matemática No es infrecuente encontrar a quien describe la matemática como una simple extensión de los lenguajes naturales humanos, que utiliza una gramática y un vocabulario definidos con extrema precisión, cuyo propósito es la descripción y exploración de relaciones conceptuales y físicas. Recientemente, sin embargo, los avances en el estudio del lenguaje humano apuntan en una dirección diferente: los lenguajes naturales (como el español y el francés) y los lenguajes formales (como la matemática y los lenguajes de programación) son estructuras de naturaleza básicamente diferente.

Por ejemplo, el compilador de C de GNU que se distribuye con Linux es una versión de una familia de compiladores de C para diferentes máquinas o sistemas operativos: Alpha, AIX, Sun, HP, MS-DOS, etc.. Además, GNU ha desarrollado un compilador de FORTRAN y otro de Pascal que, al utilizar el mismo lenguaje intermedio, pueden ser portados a todos los sistemas y máquinas en las que y a existe un compilador de C de GNU con relativamente poco esfuerzo.

La generación de código intermedio transforma un árbol de análisis sintáctico (semántico) en una representación en un lenguaje intermedio, que suele ser código suficientemente sencillo para poder luego generar código máquina.

Una forma de hacer esto es mediante el llamado código de tres direcciones. Una sentencia en código de tres direcciones es: A := B op C, donde A, B y C son operandos y op es un operador binario. También permite condiciones simples y saltos. Por ejemplo, para la siguiente sentencia:

          WHILE (A > B) AND (A < = 2 * B – 5) DO A : = A + B

el código intermedio generado ( código en tres direcciones) será:

       L1 :   IF A > B     GOTO L2
                GOTO L3
       L2 :   T1  : = 2 * B                             (*nivel más alto que ensamblador*)
              T2   :  = T1 – 5                          (*pero más sencillo que Pascal*)
                IF   A < T2   GOTO L4
                GOTO L3
        L4 :  A : = A + B
                GOTO L1
        L3 :  . . . . . . .    

APLICACIONES

La importancia practica de lenguaje en la informática se manifiesta principalmente en el uso cotidiano que hace el profesional informático de compiladores e interpretes, consustancial al la gestión y programación de los sistemas informáticos. Así pues, un conocimiento acerca del funcionamiento interno de estas herramientas básicas resulta fundamental. Pero los conocimientos adquiridos en su estudio encuentren aplicación fuera del campo de la compilación. Es probable que ocas personas realice o mantenga un compilador para un lenguaje de programación, pero mucha gente puede obtener provecho del uso de un gran número de sus técnicas para el diseño de software en general.

En efecto, entre los campos de la informática en los que encuentra aplicación las técnicas aprendidas en COMPILADORES e INTÉRPRETES se puede citar lo siguiente:

Tratamiento de ficheros de texto con información estructurada. Lenguaje como Perl y TEL, o comandos como el sed o egrep de UNIX, incorpora tratamiento de expresiones regulares para la detección y/o modificación de patrones sin texto.

Procesadores de texto. Procesadores como vi o Emacs incorporan también la posibilidad de efectuar búsquedas y sustituciones mediante expresiones regulares. Existen también procesadores (entre ellos los Emacs) capaces de analizar y tratar ficheros de texto de organización compleja.

Diseño e interpretación de lenguaje para formateo y texto y descripción de gráficos. Sistema de formateo de texto (como el HTML o el TEX) o para la especificación de tablas (tbl), ecuaciones (eqn), gráficos (postscript), etc. requieren sofisticados microprocesadores.

Gestión de base de datos. Las técnicas que estamos considerando pueden explotarse tanto en la exploración y proceso de ficheros de información como en la realización de la interfase de usuario.

Traducción de formato de fichero.

Calculo simbólico.

Reconocimiento de formas. Las técnicas de análisis sintáctico son ampliamente utilizadas en la detección de patrones en texto, el reconocimiento automático del habla o la visión por computador.