1.2.5. Preprocesadores

Los preprocesadores son un caso particular de traductor en el cual se traduce un lenguaje de alto nivel a “otro”, cuando el primero no puede pasar a lenguaje máquina directamente. El preprocesador realiza las sustituciones, pero no hace ningún tipo de análisis del contexto donde las realiza, esta es la principal diferencia entre un preprocesador y otros tipos de procesador de lenguaje.

Los preprocesadores producen la entrada para un compilador, y pueden realizar las funciones siguientes:

I. Procesamiento de macros. Un preprocesador puede permitir a un usuario definir macros, que son abreviaturas de construcciones más grandes.

2. Inclusión de archivos. Un preprocesador puede insertar archivos de encabezamiento en el texto del programa. Por ejemplo, el preprocesador de C hace que el contenido del archivo <global .h > remplace a la proposición #include <global .h> cuando procesa un archivo que contenga a esa proposición.

3. Preprocesadores “racionales”. Estos preprocesadores enriquecen los lenguajes antiguos con recursos más modernos de flujo de control y de estructuras de datos. Por ejemplo, un preprocesador de este tipo podría proporcionar al usuario macros incorporadas para construcciones, como proposiciones while o if, en un lenguaje de programación que no las tenga.

4. Extensiones a lenguajes. Estos procesadores tratan de crear posibilidades al lenguaje que equivalen a macros incorporadas. Por ejemplo, el lenguaje Equel  (Stonebraker y otros [1976]) es un lenguaje de consulta de base de datos integrado en C. EI preprocesador considera las proposiciones que empiezan con # # como proposiciones de acceso a la base de datos, sin relación con C, y se traducen a llamadas de procedimiento a rutinas que realizan el acceso a la base de datos.

Los procesadores de macros tratan dos clases de proposiciones: definición de macros y uso de macros. Las definiciones normalmente se indican con algún carácter exclusivo o palabra clave, como define o macro. Constan de un nombre para la macro que se está definiendo y de un cuerpo, que constituye su definición. A menudo, los procesadores de macros admiten parámetros formales en su definición, esto es, símbolos que se reemplazarán por valores (en este contexto, un ‘‘valor” es una cadena de caracteres). El uso de una macro consiste en dar nombre a la macro y proporcionar parámetros reales, es decir, valores para sus parámetros formales. El procesador de macros sustituye los parámetros reales por los parámetros formales del cuerpo de la macro; después, el cuerpo transformado remplaza el uso de la propia macro.

En otras palabras, los preprocesadores procesan un texto fuente modificándolo en cierta forma previamente a la compilación. Por ejemplo, el compilador del lenguaje C tiene incorporado un preprocesador.