El componente X. Generación de código con templates.

Publicado en

El siguiente trabajo es una introducción a la generación de código basado en la transformación de documentos XML con templates. Vamos a construir un generador de código de componentes para PHP como ejemplo. Se utilizan herramientas de código libre y pocos recursos de cómputo. Además se invita al lector a conocer un poco más sobre este tema, que ha cobrado actualidad aplicando nuevas técnicas de ingeniería de software.

“Un generador de código es una técnica para escribir programas que escriben código fuente”. ¿Le recuerda algo lex y yacc?; éstos son ejemplos de generadores de código, pero antes que deje de leer por malos recuerdos (sí nunca terminó su compilador); le adelanto que ésta técnica difiere de la teória de compiladores, ya que no se requiere obtener código objeto, menos ensamblado.

Un generador de código NO es un asistente de un editor de código tipo IDE; menos una solución mágica, no genera código listo para entregar al cliente. La idea es identificar qué parte del código es posible compartir (componentes), implementar una solución a problemas recurrentes (léase patrones de diseño), modelos de datos, interfases gráficas de usuario (GUI) y su comportamiento, entre otros ejemplos.

Vamos a desarrollar un ejemplo sencillo, paso a paso, utilizando XML y transformación por templates.

XML y Familia

XML (eXtensible Markup Language) es un metalenguaje (un lenguaje para describir lenguajes) para definir tus propios elementos o partes de un documento. Ej. <lenguaje = "natural">

XML fue creado por el World Wide Web Consortium (W3C) en 1998 para suplir deficiencias de HTML. En XML los elementos son definidos por el usuario con una especificación DTD (Document Type Definition). Actualmente XML es una familia de lenguajes y especificaciones adoptadas por la industria del software como un estándar abierto . Ver Fig. 1.


Fig 1. Familia XML

Componentes y Lenguajes Script

Empezamos por definir un documento DTD. Éste contiene un conjunto de reglas para organizar los datos, en nuestro caso le llamaremos componentX, que tiene una estructura jerárquica. Ver Fig. 2

Fig.2 ComponenteX

Un DTD se escribe con sintaxis de XML y está compuesto por tags, elementos, atributos y texto. Todo documento XML tiene un elemento raíz (componentx en el ejemplo).

<!ELEMENT componentx (registration, implements, script)>

Cada ComponentX, a su vez, está formado por tres elementos: registration, implements y script.

<!ELEMENT registration (description, progid, version)>

El elemento registration tiene una descripción, un id de programa y una versión del componente.