Este proyecto implementa un analizador sintáctico para un subconjunto del lenguaje SQL, con la particularidad de que las palabras clave y la estructura de los comandos están en español. El software es capaz de procesar sentencias DML (Data Manipulation Language) como INSERTAR, SELECCIONAR, ACTUALIZAR y ELIMINAR. Las sentencias procesadas y validadas sintácticamente se escriben en un archivo de salida llamado queries-result.txt.
El analizador está construido utilizando herramientas clásicas de compiladores: Flex para el análisis léxico y Bison para el análisis sintáctico, con acciones semánticas escritas en C.
- Lenguaje de implementación: C (para las acciones semánticas y funciones auxiliares).
- Analizador Léxico: Flex (o una herramienta compatible como Lex).
- Analizador Sintáctico: Bison (o una herramienta compatible como YACC).
- Sistema Operativo: Desarrollado y probado principalmente en entornos tipo UNIX (Linux, macOS). Para Windows, se requiere un entorno compatible como MinGW, Cygwin o WSL (Windows Subsystem for Linux).
- Compilador C: GCC (GNU Compiler Collection) o compatible.
.
├── pruebas/
│ ├── consultas-delete-test.txt
│ ├── consultas-insert-test.txt
│ ├── consultas-select-test.txt
│ ├── consultas-update-test.txt
│ └── test_sql.sh // (Este es un script de prueba para validar las respuestas del analizador)
├── queries-result.txt
├── run.sh
├── sql // (Este es el ejecutable generado)
├── sql.l
├── sql.y
└── README.md
Descripción de Archivos y Directorios Clave:
sql.y: Archivo de entrada para Bison. Contiene la definición de la gramática del lenguaje SQL en español, las reglas de precedencia de operadores y las acciones semánticas en C que se ejecutan al reconocer cada regla. Estas acciones incluyen la generación de la salida enqueries-result.txt.sql.l: Archivo de entrada para Flex. Define los patrones (expresiones regulares) para reconocer los componentes léxicos (tokens) del lenguaje, como palabras clave (insertar,seleccionar), identificadores, cadenas, números, etc.run.sh: Script de shell para automatizar el proceso de compilación (usando Flex y Bison para generar los archivos.c, y luego GCC para compilarlos en un ejecutable) y la ejecución del analizador.queries-result.txt: Archivo de texto donde el analizador escribe las sentencias SQL procesadas y formateadas. Se crea o se añade contenido a este archivo cada vez que se procesa una sentencia válida.pruebas/: Directorio que contiene archivos de texto (.txt) con ejemplos de sentencias SQL en español para probar las diferentes operaciones (insertar,seleccionar,actualizar,eliminar).consultas-delete-test.txt: Pruebas específicas para sentenciaseliminar.consultas-insert-test.txt: Pruebas específicas para sentenciasinsertar.consultas-select-test.txt: Pruebas específicas para sentenciasseleccionar.consultas-update-test.txt: Pruebas específicas para sentenciasactualizar.test_sql.sh: (Dentro depruebas/) Script de shell, utilizado para ejecutar las pruebas contenidas en los archivos.txtcontra el analizador.
sql: Nombre común para el archivo ejecutable generado tras la compilación.
El analizador soporta las siguientes sentencias SQL en español:
-
INSERTAR:
insertar en <tabla> valores (<lista_valores>);insertar en <tabla> (<lista_campos>) valores (<lista_valores>);
-
SELECCIONAR:
seleccionar <campos> de <tabla>;seleccionar <campos> de <tabla> donde <condicion>;<campos>puede sertodos(equivalente a*) o una lista de identificadores separados por comas.
-
ACTUALIZAR:
actualizar <tabla> establecer <campo> a <valor>;actualizar <tabla> establecer <campo> a <valor> donde <condicion>;
-
ELIMINAR:
eliminar de <tabla>;eliminar de <tabla> donde <condicion>;
Condiciones:
Las condiciones en las cláusulas donde pueden ser simples (<identificador> <operador> <valor>) o compuestas mediante los operadores lógicos y (AND) y o (OR).
- Operadores de comparación soportados:
igual,mayor,menor,mayor igual,menor igual,no igual.
Prerrequisitos:
- Flex: Instalador del generador de analizadores léxicos.
- En Debian/Ubuntu:
sudo apt-get install flex - En Fedora:
sudo dnf install flex - En macOS (con Homebrew):
brew install flex
- En Debian/Ubuntu:
- Bison: Instalador del generador de analizadores sintácticos.
- En Debian/Ubuntu:
sudo apt-get install bison - En Fedora:
sudo dnf install bison - En macOS (con Homebrew):
brew install bison
- En Debian/Ubuntu:
- GCC (o un compilador C compatible):
- En Debian/Ubuntu:
sudo apt-get install build-essential - En Fedora:
sudo dnf groupinstall "Development Tools" - En macOS: Xcode Command Line Tools (instalar con
xcode-select --install)
- En Debian/Ubuntu:
Pasos de Compilación (manual):
-
Generar el analizador léxico (desde
sql.l):flex sql.l
Esto generará el archivo
lex.yy.c. -
Generar el analizador sintáctico (desde
sql.y):bison -d sql.y
Esto generará los archivos
sql.tab.c(el código del parser) ysql.tab.h(las definiciones de los tokens, para ser usadas porlex.yy.c). La opción-des importante para crear el archivo.h. -
Compilar los archivos C generados y enlazarlos:
gcc sql.tab.c lex.yy.c -o sql_parser -lfl
-o sql_parser: Especifica el nombre del archivo ejecutable de salida (puedes llamarlosqlo como prefieras).-lfl: En algunos sistemas, es necesario enlazar la librería de Flex. Si da error, prueba sin ella o con-lypara YACC si es necesario (aunque usualmente no lo es para Bison).
Compilación usando el script run.sh (Recomendado):
El script run.sh automatiza estos pasos. Para usarlo:
- Asegúrate de que el script tiene permisos de ejecución:
chmod +x run.sh
- Ejecuta el script:
./run.sh
Una vez compilado (generando el ejecutable sql), puedes ejecutar el analizador de las siguientes maneras:
-
Modo Interactivo: Puedes ejecutar el analizador y escribir las sentencias SQL en español directamente en la terminal. Presiona
Ctrl+Dpara finalizar la entrada../sql
Luego, ingresa tus consultas, por ejemplo:
seleccionar todos de clientes donde id = 10;(Presiona Enter después de cada sentencia terminada en;) -
Desde un Archivo de Entrada: Puedes redirigir el contenido de un archivo con sentencias SQL al analizador:
./sql < archivo_de_consultas.txtPor ejemplo, para usar uno de los archivos de prueba:
./sql < pruebas/consultas-select-test.txt
Salida:
Las sentencias SQL que sean sintácticamente correctas según la gramática definida en sql.y serán procesadas, y la representación correspondiente (según se define en las acciones semánticas) se añadirá al archivo queries-result.txt. Si hay errores sintácticos, se mostrará un mensaje de error en la salida estándar de error (stderr).
El proyecto incluye scripts y archivos para pruebas:
- Archivos de prueba: Ubicados en el directorio
pruebas/, contienen colecciones de sentencias para cada tipo de operación (consultas-insert-test.txt,consultas-select-test.txt, etc.). - Script de prueba
pruebas/test_sql.sh: Este script ejecuta el analizador contra los archivos de prueba en su directorio. Para ejecutarlo:- Navega al directorio de pruebas:
cd pruebas - Asegúrate de que tiene permisos de ejecución:
chmod +x test_sql.sh - Ejecútalo:
./test_sql.sh
- Navega al directorio de pruebas:
- Script de prueba
test_sql.sh(raíz): Similar al anterior, pero ejecutado desde el directorio raíz del proyecto.
Es recomendable revisar el contenido de estos scripts para entender cómo funcionan y qué esperan como resultado (por ejemplo, si comparan la salida con un resultado esperado).
- Linux/macOS: El proyecto está orientado a estos sistemas, especialmente por el uso de scripts de shell (
.sh). Flex, Bison y GCC son herramientas estándar en estos entornos. - Windows:
- WSL (Windows Subsystem for Linux): Es la forma más sencilla de tener un entorno Linux completo en Windows, donde las herramientas y scripts funcionarán de forma nativa.
- MinGW/MSYS2: Proporciona un entorno de desarrollo GNU en Windows, permitiendo usar Flex, Bison y GCC. Podría ser necesario ajustar los scripts o comandos ligeramente.
- Cygwin: Otra alternativa para tener un entorno similar a UNIX en Windows.