ExpertCoder   ExpertCoder es un conjunto de herramientas para escribir generadores de código basados en sistemas expertos.
¿Qué es ExpertCoder?

ExpertCoder es un conjunto de herramientas para escribir generadores de código basados en sistemas expertos que corre bajo la plataforma .NET. No es un generador de generadores de código, sino un conjunto de librerías que sirven para escribir generadores.

La forma tradicional más utilizada de escribir generadores de código es simplemente escribir un programa con una serie de comandos del estilo "print".
El problema de este enfoque es que resulta muy difícil, aún para el propio autor del generador, realizar modificaciones al diseño del código generado debido a que este no es similar al código del generador.

Existen otras alternativas más avanzadas, como por ejemplo utilizar plantillas XSLT para transformar documentos XML en código fuente; con estas alternativas se gana en claridad, ya que el código del generador (la plantilla) se parece mucho al código generado; sin embargo exponen sus desventajas a la hora de agregarle inteligencia al generador, ya que el conjunto de herramientas y librerías accesibles desde una plantilla es bastante reducido.

El propósito de este proyecto es construir un conjunto de herramientas que provean al desarrollador de generadores de código lo mejor de ambos mundos:

  • La claridad que aporta el uso de plantillas para la generación de código.
  • La potencia de la plataforma .NET, junto a su enorme librería de clases, brinda un gran poder de expresión al desarrollador.

Adicionalmente, al estar basado en los principios de los sistemas expertos, los generadores resultantes son fácilmente extensibles, modulares y su estructura es más declarativa que imperativa.

¿Cómo funciona?

La idea básica es crear un sistema experto, escribiendo un conjunto de reglas y especificando las distintas precedencias entre ellas.

Estas reglas son evaluadas por un motor de ejecución, quien determina en base a las precedencias y al estado de activación de cada regla cual ejecutar.

El motor de ejecución provee un entorno, donde hay información proveniente de tres fuentes:

  • Parámetros: estos se encuentran almacenados en ficheros de configuración.
  • Modelo de entrada: es el modelo que se quiere convertir.
  • Conocimiento deducido: el mismo sistema experto puede modificar su memoria activa. De esta manera se puede implementar un mecanismo de interacción indirecto entre reglas.

El entorno del motor mantiene referencias a:

  • El modelo de entrada.
  • El elemento actual del modelo de entrada.
  • El modelo de salida.
  • El elemento actual del modelo de salida.

Un generador típico estará compuesto por dos tipos de reglas: reglas de navegación y reglas de producción.
Las reglas de navegación se activan ante la presencia de un determinado tipo de elemento en la entrada, y procede a "navegar" las relaciones de dicho elemento, cambiando el elemento actual del modelo de entrada.
Las reglas de producción, al activarse ante un elemento en la entrada ( y tal vez también cierto tipo de elemento a la salida), aplican un algoritmo escrito por el desarrollador para generar nodos a la salida utilizando la información actual que se encuentra en la entrada y la memoria activa.