EMU-Code: Effective Mark-Up of Source Code

Esquemas de marcado de código

Emu

XML es un lenguaje de marcado genérico acopañado de un metalenguaje que permite definir lenguajes particulares de marcado. La primera tarea del proyecto EMU-Code es elegir el lenguaje o lenguajes de programación a tratar, y definir uno o varios lenguajes de marcado para la representación efectiva de las construcciones del código fuente correspondientes al lenguaje o lenguajes seleccionados.

La tarea no es sencilla. Por una parte existe una enorme cantidad de lenguajes de programación interesantes, muy diferentes entre sí. Por otra parte la representación XML no tiene que ser una transcripción directa de la definición habitual de la gramática del lenguaje, sino que esta gramática ha de ser reformulada para que pueda ser utilizada de manera efectiva por las herramientas que han de procesar representación XML del código.

Finalmente queda la cuestión de qué mecanismo de definición de marcado se va a utilizar. El hecho es que existen diferentes notaciones para definir lenguajes particulares de marcado XML. Las más usadas son posiblemente DTD, Xsd y Relax-NG.

Selección de lenguajes de programación

Tras un rápido análisis de la variedad de lenguajes existentes se ha decido limitar inicialmente el repertorio a lenguajes imperativos. De hecho se ha comenzado por considerar inicialmente sólo un subconjunto representativo de construcciones, comunes a los lenguajes de programación más utilizados.

De acuerdo con ello se ha desarrollado sólo un esquema de marcado, capaz de representar un subconjunto significativo de las construcciones de los lenguaje más usados. Los lenguajes seleccionados corresponden a dos familias bien conocidas. Por una parte la familia C, C++ y Java, y por otra la de los lenguajes wirthianos: Pascal, Modula, Oberon y Ada.

Selección del metalenguaje de definición de esquemas

Los metalenguajes XML presentan diferencias importantes entre sí. Los DTD (Document Type Definition) son un legado de SGML, y son una notación independiente, totalmente distinta de XML. Tiene la ventaja de ser un lenguaje bastante sencillo, equivalente a EBNF en lo referente a las estructuras de elementos.

El metalenguaje para definición de esquemas creado expresamente para XML y que usa el mismo tipo de notación es Xsd (Xml Schema Definition). Es un lenguaje potente, pero al mismo tiempo bastante complejo.

Relax-NG es también un lenguaje más potente que los DTD, y no tan complicado como Xsd. Su desventaja es que no está aceptado como estándar por el consorcio W3C, y no está soportado por todas la herramientas XML del mercado.

El metalenguaje elegido para la primera fase es DTD, por su sencillez y por ser una notación estándar. En una segunda fase se podría contemplar el uso de otros metalenguajes.

Desarrollo del esquema de marcado

En realidad se han desarrollado dos versiones del esquema de marcado, que sólo se diferencian en el orden de algunos elementos para adaptarse mejor al orden sintáctico de los lenguajes seleccionados. Los elementos que cambian de orden son los identificadores y el tipo asociado en las declaraciones de constantes, variables y argumentos de funciones y procedimientos. En lenguaje C y similares el tipo se escribe delante del identificador, mientras que en Pascal y derivados se escribe primero el identificador y luego el tipo.

La razón de usar dos versiones es para facilitar la aplicación de herramientas de transformación que no son capaces de cambiar el orden de los elementos. En particular la generación directa de vistas del código mediante hojas de estilo en cascada CSS, soportadas por los navegadores Web y algunos editores XML.

Los esquemas no contemplan elementos de bajo nivel de las gramáticas de los lenguaje seleccionados. La experiencia de los editores de estructura desarrollados en los años 80 indica que la edición de expresiones, por ejemplo, es muy complicada si se pretende hacerla siguiendo la sintaxis completa del lenguaje (término, factor, primario, ...), y es preferible editarla, y por tanto representarla, como texto plano.

Por otra parte en este primer paso se contempla sólo un subconjunto refundido de construcciones comunes a la mayoría de los lenguajes seleccionados. Por ejemplo, se contempla una estructura FOR para representar un bucle con contador, pero no el 'for' general de C/C++. Sí se contemplan, sin embargo, las estructuras de programación orientada a objetos (clases, métodos, herencia, ...) a pesar de que sólo algunos de los lenguajes seleccionados dan soporte a este paradigma.

Se mantiene la posibilidad de usar comentarios para documentar el código, pero de una manera bien estructurada. Se establecen comentarios específicos para documentación de módulos y funciones, y comentarios generales de texto libre asociados a cada sentencia o grupo de sentencias.

Ejemplo de marcado EMU-Code

***


Copyright © 2004 Manuel Collado: mcollado@fi.upm.es