Recta final de la fase de desarrollo

A falta de unos pocos días para que dé comienzo la fase de evaluación del CUSL [1], ya se dispone de un prototipo con un alto grado de funcionalidad y que realiza la gran mayoría de las traducciones correctamente. Además de esto, hay que destacar los siguientes puntos en lo referente al desarrollo:

  • Se ha añadido una lista de consultas a la GUI de forma que el usuario pueda manejar varias de manera simultánea y sin tener que perder aquellas que ha escrito anteriormente.
  • Se ha publicado el código fuente en GitHub [2] para facilitar la labor de corrección por parte de los correctores del CUSL.
  • Se ha incluido finalmente la traducción del operador cociente (uno de los operadores más complejos del Álgebra Relacional). Para ello, me he valido de la traducción alternativa que propone Victor M. Matos en su trabajo “A Simpler (and Better) SQL Approach to Relational Division” [3].
  • Se ha adjuntado un fichero README.md actualizado al repositorio del proyecto en GitHub con información complementaria sobre el mismo, así como unas pautas para ejecutar el prototipo y cómo comenzar a utilizar la aplicación.

bfc3bde0-1788-11e7-8ad0-8095920f8dcc.png

Referencias:

[1] CUSL

[2] Repositorio GitHub

[3] A Simpler (and Better) SQL Approach to Relational Division

Traducciones básicas y árbol de análisis sintáctico

Tal y como se comentó en la anterior entrada del blog, ya es posible realizar traducciones básicas al SQL. Además, en la consola se muestran ya los errores sintácticos que puedan contener las expresiones escritas en Álgebra Relacional y se añade una pestaña en el área del trabajo para mostrar el árbol de análisis sintáctico (para que los más curiosos puedan ver cómo el motor de traducción ha reconocido cada token de la expresión en Álgebra Relacional).

Captura de pantalla de 2017-03-04 15-15-25.png

Captura de pantalla de 2017-03-04 15-14-50.png

Sin prisa pero sin pausa

Después de que hayan transcurrido varios días desde la última entrada en el blog, el proyecto ha experimento avances notorios, entre los que cabe destacar los siguientes:

  • Conexión con un SGBD de PostgreSQL (a través de JDBC).
  • Creación en dicho SGBD de la base de datos con la que el usuario trabaja en el entorno.
  • Soporte para manejar varias bases de datos en simultáneo en el entorno.
  • Mejorada la apariencia de la interfaz gráfica.
  • Añadida funcionalidad a algunos botones y a la consola de retroalimentación.
  • Traducción a SQL de expresiones básicas en Álgebra Relacional.

Algunas capturas de pantalla:

Captura de pantalla de 2017-02-28 15-31-26.pngCaptura de pantalla de 2017-02-28 15-31-51.png

Todavía queda mucho por hacer. Habrá que exprimir al máximo el último mes antes de que comience la fase de evaluación del concurso.

DSL finalizado

Tras algunas horas de trabajo, se ha conseguido implementar un DSL sencillo que permita especificar la creación de una base de datos, así como el análisis de los ficheros que utilizan este formato y el posterior procesamiento de errores. Un ejemplo es el siguiente (la definición formal de este DSL se detallará debidamente en la documentación del proyecto):

DATABASE Courses;

TABLE Course(Department: String, PK;
Course: Integer, PK;
Section: Integer, PK;
Semester: String;
Year: Integer;
Instructor: Integer)
=>
(CSCI, 2800, 001, Spring, 2006, 2);
(CSCI, 2800, 201, Spring, 2006, 1);
(CSCI, 2910, 001, Spring, 2006, 4);
(CSCI, 2910, 201, Spring, 2006, 3);

TABLE Instructor(ID: Integer, PK; Name: String; Phone: String)
=>
(1, Bailes, 4234396958);
(2, Bailey, 4234396959);
(3, Laws, 4234396952);
(4, Tarnoff, 4234396404);


Tal y como se ha dicho, también se ha conseguido realizar el procesamiento de los errores que genera la herramienta ANTLR. Para ello, ha tenido que implementarse la interfaz ANTLRErrorListener [1] y sobreescribir el método syntaxError. Esto ha permitido que, por ejemplo, los errores puedan ser mostrados al usuario desde la propia GUI:

Captura de pantalla de 2017-02-19 21-49-49.png

 

[1] Interface ANTLRErrorListener

Añadidas palabras reservadas del Álgebra Relacional al editor de código

Se ha conseguido elaborar una lista completa de todas palabras reservadas del Álgebra Relacional para poder realizar el resaltado sintáctico en el editor de código de la aplicación. Para ello, ha debido actualizarse convenientemente el TokenMaker de la herramienta RSyntaxTextArea utilizada en el proyecto. Cabe destacar que, para el caso del lenguaje SQL, no es necesario realizar esta tarea puesto que la herramienta ya incorpora soporte para el reconocimiento sintáctico de éste.

Captura de pantalla de 2017-02-17 12-03-19.png

[1] Adding Syntax Highlighting for a new Language

IDEA: DSL para la especificación de bases de datos desde fichero

Aprovechando que el proyecto utiliza ANTLR como herramienta para el reconocimiento de lenguajes, he pensado que no sería una mala idea crear un DSL [1] que permitiera especificar, de forma sencilla, una base de datos sobre la que operar en el entorno gráfico. Además, los ficheros que contengan la especificación podrán ser guardados en disco para que el usuario recupere esas bases de datos y las cargue en la aplicación siempre que quiera.

Veamos cómo avanza esta idea.

[1] Domain-specific language

Grandes avances en la gramática

La gramática independiente del contexto que utilizará la aplicación (por medio de ANTLRv4) para el reconocimiento de expresiones en el lenguaje del Álgebra Relacional cuenta ya con las siguientes características:

  • Soporte para vistas (alias para subconsultas).
  • Soporte para los cinco operadores elementales del AR (unión, diferencia, producto cartesiano, proyección y selección) y cinco avanzados (intersección, natural join, yunción, cociente y renombramiento de relaciones).
  • Adición de comentarios de una línea (‘//’) y multilínea (/* … */).

A continuación se muestra el árbol de análisis sintáctico que se genera tras reconocer algunas expresiones en Álgebra Relacional que utilizan algunas de las funciones mencionadas:

Captura de pantalla de 2017-02-12 20-16-30.png

JITRAX: Java Interpretation Tool for Relational Algebra Expressions

Dentro del ámbito de las bases de datos, el Álgebra Relacional se erige como un lenguaje teórico de consultas cuya compresión debe hacerse efectiva por parte de aquellos que pretenden iniciarse en el estudio de las consultas. Además, constituye una poderosa herramienta que permite, entre otros, establecer un marco para la medición de la potencia expresiva de los lenguajes comerciales, tales como el ampliamente conocido SQL.

El principal objetivo de este proyecto consiste en la creación de una aplicación que permita llevar al terreno práctico este lenguaje teórico, de forma que el proceso de aprendizaje de éste por parte de los estudiantes se torne más eficaz y eficiente. Para alcanzar dicha meta, la estrategia que se propone será la de traducir las expresiones del Álgebra Relacional a sentencias equivalentes del lenguaje comercial SQL (en el cual el Álgebra Relacional está contenido) para, posteriormente, establecer una conexión con algún SGBD (en principio, PostgreSQL) y ejecutar sobre él las expresiones traducidas.

Así, el usuario podrá ver de forma gráfica qué efecto han tenido sobre la BD las sentencias que ha escrito en Álgebra Relacional. También podrá ver cómo el motor de traducción ha reescrito dichas sentencias en lenguaje SQL.