GomorraSQL è un Domain Specific Language (DSL) dichiarativo ispirato a SQL con sintassi in dialetto napoletano. Questo progetto implementa un compilatore completo che genera LLVM IR per ottimizzare l'esecuzione delle query WHERE su file CSV.
Autore: Angelo Alberico
Matricola: NF22500104
Corso: Implementazione di Linguaggi di Programmazione
Anno Accademico: 2025/2026
# Clona repository
git clone <repository-url>
# Installa dipendenze con uv
uv sync# Tutti i test (56 totali)
uv run pytest tests/ -v
# Con coverage report
uv run pytest tests/ -v --cov=src --cov-report=term-missing
# Test specifici
uv run pytest tests/test_compiler.py -v # 27 test compiler
uv run pytest tests/test_generators.py -v # 3 test generators
uv run pytest tests/test_llvm_ir_generation.py -v # 20 test LLVM IR
uv run pytest tests/test_type_inference.py -v # 6 test type inferenceTotale: 56 test, Coverage: 84.40%
Test end-to-end che coprono tutte le funzionalità del linguaggio:
- SELECT con/senza WHERE, proiezioni specifiche
- Operatori di comparazione (>, <, >=, <=, =, <>)
- Operatori logici (AND, OR) con annidamento
- NULL checks (è nisciun, nun è nisciun)
- JOIN tra tabelle con disambiguazione
- Errori semantici (tabella/colonna inesistente)
- Errori sintattici, conversioni booleani
- Type inference (int, float, string)
Validazione generazione LLVM IR parametrico:
- Operatori comparazione (icmp signed/unsigned)
- Operatori logici (and i1, or i1)
- NULL checks, type inference
- Struttura IR (parametri tipizzati, single basic block)
- Generatori lazy per JOIN su 500K righe
- Uso memoria ridotto
- Lettura header-only CSV
- Inferenza automatica tipi (int, float, string)
- Gestione valori NULL, tipi misti
- Generazione IR con tipi corretti
Esecuzione:
# Tutti i test con coverage
uv run pytest tests/ -v --cov=src --cov-report=term-missing
# Test specifici
uv run pytest tests/test_compiler.py -v
uv run pytest tests/test_llvm_ir_generation.py -v
uv run pytest tests/test_generators.py -v
uv run pytest tests/test_type_inference.py -v| SQL Standard | GomorraSQL | Esempio |
|---|---|---|
SELECT |
RIPIGLIAMMO |
RIPIGLIAMMO nome, eta |
FROM |
MMIEZ 'A |
MMIEZ 'A "guaglioni.csv" |
WHERE |
arò |
arò eta > 18 |
JOIN |
pesc e pesc |
pesc e pesc "ruoli.csv" |
AND |
E |
arò eta > 18 E zona = "Scampia" |
OR |
O |
arò nome = "Ciro" O eta < 25 |
IS NULL |
è nisciun |
arò zona è nisciun |
IS NOT NULL |
nun è nisciun |
arò nome nun è nisciun |
- Comparazione:
>,<,>=,<=,=,<>,!= - Logici:
E(AND),O(OR) - NULL:
è nisciun(IS NULL),nun è nisciun(IS NOT NULL)
RIPIGLIAMMO nome, eta
MMIEZ 'A "guaglioni.csv"RIPIGLIAMMO nome, zona
MMIEZ 'A "guaglioni.csv"
arò eta > 18RIPIGLIAMMO nome
MMIEZ 'A "guaglioni.csv"
arò (eta > 18 E zona = "Scampia") O nome = "Ciro"RIPIGLIAMMO nome, nome_2, ruolo
MMIEZ 'A "guaglioni.csv"
pesc e pesc "ruoli.csv"
arò nome = nome_2-- IS NULL
RIPIGLIAMMO nome
MMIEZ 'A "guaglioni.csv"
arò zona è nisciun
-- IS NOT NULL
RIPIGLIAMMO nome, eta
MMIEZ 'A "guaglioni.csv"
arò nome nun è nisciunRIPIGLIAMMO guaglioni.nome, lexer.token, lexer.line
MMIEZ 'A "guaglioni.csv"
pesc e pesc "lexer.csv"
arò guaglioni.eta > 18 E lexer.line < 100- GitHub: github.com/Nakura125/GomorraSQL
- Specifica Completa: docs/SPECIFICA_COMPLETA.md
- Presentazione Beamer: Slide LaTeX nella repository
- LLVM Language Reference: llvm.org/docs/LangRef.html
- llvmlite Documentation: llvmlite.readthedocs.io
- Lark Parser: lark-parser.readthedocs.io
- Gomorra-SQL (Java): github.com/aurasphere/gomorra-sql
Angelo Alberico
Matricola: NF22500104
GitHub: @Nakura125
Questo progetto è sviluppato per scopi didattici nel corso di Implementazione di Linguaggi di Programmazione presso l'Università degli Studi di Salerno.
Il progetto originale Gomorra-SQL (Java) è distribuito sotto licenza MIT da Donato Rimenti.
Fine Documento - Ultima modifica: Gennaio 2026
Angelo Alberico - Progetto Linguaggi e Compilatori