[en]
Esta no es una aplicación 100% Java pura, ya que una librería, jLine, usa código nativo en MS Windows. Sin embargo, para Linux y Unix puede ser considerada como puramente Java. Por lo tanto, la aplicación misma es Pure Java pero no una de sus dependencias.
Cada comando de DB2 tiene opciones diferentes por lo que su gramática es específica para cada comando. Algunos comandos se ejecutan desde la consola CLP de DB2, otros desde la línea de comando del sistema.
Esta aplicación tiene definida la gramática de los comandos, por lo que puede reconocer la estructura de un comando que se esté digitando, y proponer posibles opciones.
La gramática está definida en un conjunto de archivos de configuración, y cuando se carga la aplicación, se crea un grafo que representa la gramática. Este grafo tiene un punto de entrada (Starting Node) y un punto de salida Ending Node.) Los nodos del grafo son cada una de las palabras que componen un comando, las cuales hacen parte de la gramática. Los caminos entre nodos son las posibilidades entre los diferentes parámetros de un comando.
Cuando la aplicación se ejecuta, esta lee el archivo de configuración, y dependiendo de lo que esté definido en este, lee los archivos de definición de gramática para construir el grafo. Mientras construye el grafo, la aplicación está lista para recibir órdenes del usuario y empezar a asistirle en la escritura de comandos.
Cada vez que el usuario pide ayuda, la aplicación toma lo que el usuario ha escrito, y analiza desde el comienzo de la frase hasta la posición actual del cursor. Convierte la frase en tokens, los cuales pueden ser palabras o algunos signos separadores (como los paréntesis, las comillas, etc.). Esto es lo que se conoce como análisis léxico.
Después, la aplicación pasa esta lista de tokens al analizador sintáctico y este compara dicha lista con los nodos del grafo. Este proceso toma el nodo inicial del grafo (Starting Node), y ve si alguno de los caminos que este tiene corresponde al primer token de la lista. Si es así, continua con el siguiente token de la lista y cambia su localización en el grafo, ubicándose en el nodo que encaja. Vuelve a analizar si el nodo actual del grafo tiene un camino que corresponde con el segundo token de la lista. Este proceso lo realiza varias veces hasta que encuentre uno de los siguientes casos:
La gramática definida en la aplicación no es estrictamente la misma usada en DB2. IBM puede cambiar de versiones, o adicionar nuevos comandos y esta aplicación (Zemucan) queda desincronizada con estos cambios. Por eso, la aplicación se debe actualizar con la información sobre las últimas versiones.
Esta aplicación no es estrictamente para DB2. Ella puede funcionar con cualquier programa que se ejecute desde línea de comando y que su gramática tenga muchas opciones.
La interacción con la terminal de usuario se hace por medio de jLine. Esta es una utilidad que maneja ese tipo de eventos.
La aplicación se puede extender para trabajar con otra interfaz de usuario, sea otra interfaz de texto como Charva, ya sea interfaces gráficas.
Además, el corazón (core) puede ser usado con otras aplicaciones Java. Como parte de la del desarrollo de esta aplicación, se incluyen unos Extras que usan el core, el cual lee la gramática y genera el grafo.
[en]