La generación de código data desde la existencia de los primeros compiladores. Hasta la aparición de los primeros generadores de código comerciales u orientados a "usuarios finales"; la generación de código era exclusividad de programas compiladores especializados.
En tiempos más recientes la generación de código, gracias al avance de la ingeniería del software, se ha llevado a un nivel diferente; donde se encuentran programas generadores de pantallas, reportes y consultas, estas son herramientas de gran utilidad; pero se debe, en la mayoría de los casos, Pagar una gran cantidad de dinero por ellos.

Figura 2.1. Arquitectura de un Compilador
Un compilador, básicamente, es un programa que lee un archivo con código fuente; este código fuente lo traduce a un lenguaje llamado lenguaje objeto. En este proceso se le indica al usuario la existencia de errores de codificación.
GENERACION DE CÓDIGO
Aquí se hablará de las herramientas generadoras automáticas de código para un compilador. Estas herramientas trabajan basadas en un conjunto de reglas; estas reglas definen la traducción de las instrucciones del lenguaje intermedio al lenguaje de máquina.
Para la generación de código, se busca en las reglas establecidas la proposición que coincida con la entrada actual; la entrada actual proviene de un árbol. Un ejemplo de esto seria
Entonces el compilador recibe una entrada de caracteres, por lo general escrita por el programador; el compilador realiza los análisis: léxico, sintáctico y semántico, para generar seguidamente el código intermedio, el código intermedio se genera con principios de búsqueda de patrones y aplicación de reglas. Después se hace la optimización del código intermedio; seguidamente se realiza la generación de código objeto en lenguaje de máquina.
Al colocar un esquema general, en donde se muestre la ubicación del generador de código construido por el usuario, con respecto a un compilador, el resultado seria el que se muestra el la figura 2.2.

Figura 2.2. Compilador y generador de código.
La ingeniería del software evoluciona cada día; esta evolución conlleva a la creación de métodos mucho más cómodos, precisos, confiables y rápidos para la creación de software.
Para la creación de generadores de código se deben considerar los siguientes aspectos:
La
arquitectura de software para la cual se va ha desarrollar el generador Las características especificas del
lenguaje de programación para el cual se hará el generador. El lenguaje con el que se desarrollará el propio generador Responder los interrogantes: ¿La generación de código se realizará a partir de modelos como
Uml1? ¿La generación de código se hará a partir de las tablas de una base de datos ?,¿Se realizará un generador de código que su resultado sea fragmentos de código que son de uso más frecuente en el software? ¿Se creará un generador genérico que "genere" código para diferentes lenguajes. Las reglas de utilización del generador, en otras palabras, la forma adecuada para que los usuarios del generador obtengan el mayor provecho.
En sintesis para crear un generador de código se deben hacer muchas de las tareas que realizan los compiladores; algunas de estas tareas son: la busqueda de patrones,la escritura de código, el analisis sintactico, el analisis lexico y la optimización de código. Estas tareas las realiza el desarrollador una vez para una arquitectura especifica.
1 UML . (Unified Modeling Planguage) Lenguaje Unificado de Modelado. Lenguaje gráfico, basado en la teoría de objetos, para la representación gráfica de un sistema