Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca...
-
Upload
nunzia-del-vecchio -
Category
Documents
-
view
215 -
download
0
Transcript of Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca...
Studente: Veronica Conti
Docente: Enrico Denti
ViBiTechLinguaggio per la gestione di una videoteca e biblioteca domestica
Progetto per l’esame di Linguaggi e Modelli Computazionali L-S
Anno Accademico 2008/2009
Università degli Studi di BolognaFacoltà di Ingegneria
2
Obiettivi del progetto Progettare un linguaggio che permetta
di gestire un archivio di libri e film
Realizzare un interprete per questo linguaggio che controlli gli inserimenti dell’utente e gestisca la persistenza dei dati immessi
Realizzare una visualizzazione a tabelle dei dati persistenti presenti gestiti dall'applicazione
21/06/2010 ViBiTech
3
Linguaggio: esempioEsempio di inserimento di un nuovo libro
21/06/2010 ViBiTech
inserisci libro {TITOLO "Yoga per negati";AUTORE "Georg Feuerstein, Larry Payne";EDITORE "Mondadori";GENERE "sportivo";
COLLANA "Oscar manuali";ANNO 2008;NRPAG 372;TRAMA "dalle posizioni all’alimentazione e molto
altro";COSTO 13.50 € ;PROVENIENZA comprato da:
NOME "Veronica";COGNOME "Conti";NRTEL 3343211062;il:22/02/2010;
}
4
Grammatica – NON TERMINALI1
Scopo: punto di partenza per ogni interazione col sistema
Scelta dell’operazione eseguire
21/06/2010 ViBiTech
<S> ::= <ViBiTech><ViBiTech> ::= <Inserisci> | <ApriScheda> | <Aggiorna> |
<Prestito> | <Rimuovi>
<Inserisci> ::= inserisci (<Libro> | <Film>)<ApriScheda> ::= apriScheda (<CercaLibro> | <CercaFilm>)<Aggiorna> ::= aggiorna (<AggiornaLibro> | <AggiornaFilm>) <Prestito> ::= prestito (<CercaLibro> | <CercaFilm>) a <SGRAF> <Persona> <DGRAF> il <SGRAF> <Data><DGRAF> <Rimuovi> ::= rimuovi ( <RimuoviPrestito> | <CercaLibro> |
<CercaFilm>)
5
Grammatica – NON TERMINALI2
Inserimento di una nuova scheda
21/06/2010 ViBiTech
<Inserisci> ::= inserisci (<Libro> | <Film>)<Libro> ::= libro <SGRAF>
TITOLO <STRINGA> <PTOVIRG>
AUTORE <STRINGA> <PTOVIRG>
EDITORE <STRINGA> <PTOVIRG>
GENERE <STRINGA> <PTOVIRG>
<CampiFacoltativiLibri> <DGRAF>
<Film> ::= film <SGRAF>
TITOLO <STRINGA> <PTOVIRG>
REGISTA <STRINGA> <PTOVIRG>
DURATA <NUM> ( \' | min ) ( . )? <PTOVIRG>
GENERE <STRINGA> <PTOVIRG>
<CampiFacoltativiFilm> <DGRAF>
Campi che qualificano una nuova
scheda libro
Campi che qualificano una nuova scheda film
6
Grammatica – NON TERMINALI3
Apertura di una scheda esistente
Produzioni per il ritrovamento di una scheda in base al titolo
21/06/2010 ViBiTech
<ApriScheda> ::= apriScheda (<CercaLibro> | <CercaFilm>)
<CercaLibro> ::= libro <SGRAF> TITOLO <STRINGA>
<PTOVIRG> <DGRAF>
<CercaFilm> ::= film <SGRAF>
TITOLO <STRINGA> <PTOVIRG>
<DGRAF>
7
Grammatica – NON TERMINALI4
Aggiornamento dei campi facoltativi
21/06/2010 ViBiTech
<Aggiorna> ::= aggiorna (<AggiornaLibro> | <AggiornaFilm>)
<AggiornaFilm >::= <CercaFilm> <SGRAF> <CampiFacoltativiFilm> <DGRAF><CampiFacoltativiFilm> ::=
( ATTORI <STRINGA> ( <VIRG> <STRINGA> )? <PTOVIRG> )? ( ANNO <NUM> <PTOVIRG> )? ( PRODUZIONE <STRINGA> <PTOVIRG>
)? ( TRAMA ( <STRINGA> )+ <PTOVIRG> )? ( COPERTINA <IMGPERCORSO> <PTOVIRG> )? ( GIUDIZIO <GIUDIZIO> <PTOVIRG> )? ( <CercaLibro> )?
<AggiornaLibro>::= <CercaLibro> <SGRAF> <CampiFacoltativiLibro> <DGRAF><CampiFacoltativiLibro> ::=
( COLLANA <STRINGA> <PTOVIRG> )? ( ANNO <NUM> <PTOVIRG> )? ( NRPAG <NUM> <PTOVIRG> )? ( ISBN <ISBN> <PTOVIRG> )? ( TRAMA ( <STRINGA> )+ <PTOVIRG> )? ( COPERTINA <IMGPERCORSO> <PTOVIRG> )? ( COSTO <FLOAT> ( euro | € | \u20ac )? <PTOVIRG> )? ( GIUDIZIO <GIUDIZIO> <PTOVIRG> )? ( PROVENIENZA
<Provenienza> )?
<Provenienza> ::= ( regalato | comprato ) da <DUEPTI> <Persona> il
<DUEPTI> <Data>Possibilità
di associare il titolo di un libro al
film
8
Grammatica – NON TERMINALI5
Gestione dei prestiti e della rimozione
21/06/2010 ViBiTech
<Prestito> ::= prestito (<CercaLibro> | <CercaFilm>) a <SGRAF> <Persona> <DGRAF> il <SGRAF> <Data><DGRAF>
<Rimuovi> ::= rimuovi ( <RimuoviPrestito> | <CercaLibro> | <CercaFilm>)
<RimuoviPrestito> ::= prestito ( <CercaLibro> | <CercaFilm> )
<Persona> ::= NOME <STRINGA> <PTOVIRG> COGNOME <STRINGA> <PTOVIRG> ( NRTEL ( <NUM> )+ <PTOVIRG> )?
<Data> ::= <NUM> <DATASEPARATOR> <NUM> <DATASEPARATOR> <NUM> <PTOVIRG>
Campo facoltativo: <Persona> viene usato anche nei
campi facoltativi di
<Libro>
<Provenienza> ::= ( regalato | comprato ) da <DUEPTI> <Persona> il
<DUEPTI> <Data>
9
Grammatica – TOKEN
Parole chiave del linguaggio:
21/06/2010 ViBiTech
<SGRAF: "{"><DGRAF: "}"><PTOVIRG: ";"><DUEPTI: ":"><VIRG: ",">
<ISBN: <NUM> "-" <NUM> "-" <NUM> "-" <NUM> "-" <NUM>><DATASEPARATOR: "/" | "\\" | "_" | "." | "-"><#PERCORSOFILE: (["a"-"z"] ":\\" | ["A"-"Z"] ":\\" | "..\\" | ".\\")?
(<PERCORSOVALIDO> "\\")* | ("/" | "../" | "./")? (<PERCORSOVALIDO> "/")*><#PERCORSOVALIDO: (["a"-"z","A"-"Z","0"-"9"," ","_","."])+><IMGPERCORSO: <PERCORSOFILE> <IMGNOME>><IMGNOME: <PERCORSOVALIDO> "." ("gif" | "GIF" | "jpg" | "JPG" | "png" | "PNG")><GIUDIZIO: "eccellente" | "ottimo" | "buono" | "discreto" | "mediocre">
<STRINGA: "\"" <LETTER> (<LETTER>)* "\""><#LETTER: ["a"-"z"] | ["A"-"Z"] | ["0"-"9"] | "!" | "?" | "." | "\'" | " " | ",">
<FLOAT: <NUM> ("." | ",") <NUM>><NUM: ["0"-"9"] (<CIFRA>)*><#CIFRA: ["0"-"9"]>
Per delimitare blocchi logici
Per la definizione di
stringhe
Per descrivere l’URL di un’immagine di
copertina
Per la definizione di numeri
10
Considerazioni su grammatica & linguaggio1
La grammatica presenta un solo simbolo non terminale in tutte le parti sinistre delle produzioni: ◦ A→α con α∈(VT∪VN)*, A ∈VN
Secondo la classificazione di Chomsky è una grammatica context-free (tipo 2) ◦ Non ha produzioni regolari
Alcune produzioni prevedono parti opzionali e possono produrre ε-rules:◦ <CampiFacoltativiLibro>◦ <CampiFacoltativiFilm> ◦ Possibilità di eliminazione della stringa vuota
tramite tecniche di riscrittura
21/06/2010 ViBiTech
<CampiFacoltativiLibro> ::= ( COLLANA <STRINGA> <PTOVIRG> )?
( ANNO <NUM> <PTOVIRG> )? ( NRPAG <NUM> <PTOVIRG> )?
( ISBN <ISBN> <PTOVIRG> )? ( TRAMA ( <STRINGA> )+ <PTOVIRG> )?
( COPERTINA <IMGPERCORSO> <PTOVIRG> )? ( COSTO <FLOAT> ( euro | € | \u20ac )?
<PTOVIRG> )? ( GIUDIZIO <GIUDIZIO> <PTOVIRG> )?
( PROVENIENZA <Provenienza> )?
11
Considerazioni su grammatica & linguaggio2
Se la grammatica fosse LL(1) sarebbe sufficiente un solo simbolo per scegliere la produzione da applicare…
◦ La presenza di ε-rules fa venire a meno la condizione sufficiente per la verifica tramite StarterSymbols
◦ Calcolo dei DirectorSymbols DS(A→α) = SS(α)∪FOLLOW(A)
◦ Insiemi disgiunti Condizione necessaria e sufficiente verificata!
Analisi Ricorsiva Discendente (top-down)◦ Una funzione per ogni VN in grado di riconoscere il
sottolinguaggio generato da esso◦ Immediata costruzione del riconoscitore
Il linguaggio generato è regolare (tipo 3) poiché la grammatica non contiene self-embedding
21/06/2010 ViBiTech
12
Architettura del sistema1
21/06/2010 ViBiTech
File.vbt
ASTetc …
Scanner generato in
automatico da JavaCC;
individua i singoli token
Parser generato in
automatico da JavaCC; effettua l’analisi
sintattica
Effettuano l’analisi semantica visitando
l’AST grazie al meccanismo del Double
Dispatch.Due differenti funzioni di interpretazione…
Package generato in automatico da JTB a
partire dal file di specifica della grammatica
Package generato in automatico da JTB
contenente interfaccia del visitor e
implementazione con visita DepthFirst
13
Architettura del sistema2
Analisi semantica realizzata dai Visitor ViBiTechVisitor
◦ Controllo coerenza con labase di dati esistente: In caso di:
Inserimento creazione di nuova riga nella tabella Ricerca, Aggiornamento verifica di presenza di una scheda con
Prestito, Rimozione titolo coincidente Rimozione di eventuale effetto collaterale sui prestiti collegati
Libro/Film presenti Controllo sulle date giorno ∈ [1,31], mese ∈ [1,12]
ViBiTechTreeVisitor◦ Crea una rappresentazione
dell’AST utilizzando classi delpackage javax.swing.tree omettendo produzioni non significative
21/06/2010 ViBiTech
14
Architettura del sistema3
Gestione della persistenza:◦ Pattern DataAccessObject per accesso al DB:
Il cambiamento del dispositivo di persistenza non ha impatto sui componenti di business
◦ Pattern creazionale Factory per ottenere le implementazioni concrete
◦ Implementazione: DerbyDB
21/06/2010 ViBiTech
Logica di accesso ai dati:If stabiliscono
metodi read/write
Logica di business
Implementazione JDBC:
astrazione dallo specifico DB sottostante
Implementazioni in accordo allo specifico
DB
Pattern creazionale
Pattern creazionale
Pattern creazionale
15
Architettura del sistema4
Utilities:◦ Classi per inizializzare il DB ed
effettuare controlli in fase di progettazione
◦ Classi per l’highlighting delle frasi inserite nell’interfaccia grafica
◦ Classi per la gestione di apertura e salvataggio di file in formato .vbt
21/06/2010 ViBiTech
16
Architettura del sistema5
Interfaccia grafica:
◦ Frame che lancia e gestisce l’applicazione
◦ Classi per la gestione delle tabelle nell’interfaccia grafica
◦ Finestra di dialogo per l’eventuale sovrascrittura in fase di salvataggio di file
◦ Frame per la gestione di informazioni sull’applicazione
21/06/2010 ViBiTech
17
Package GUI in azione
21/06/2010 ViBiTech
Visualizzazione a tabelle dei dati esistenti
Albero rappresentante l’esecuzione
di un comando
Area per l’inserimento
dei comandi in forma testuale
Tasti rapidi per l’inserimento di
strutture predefinite dei
comandi testuali
Area di notifica per eventuali messaggi di
errore
Syntax highlighting
18
Test e collaudi Al fine di collaudare il sistema sono stati eseguiti
test per verificare la correttezza delle analisi semantiche tramite opportuni file .vbt dati in input◦ File con sintassi errata◦ File corretti sintatticamente ma con errori di semantica
Previsione di messaggi opportuni in caso di rilevazione di errori sintattici/semantici◦ Area apposita per la visualizzazione
sull’interfaccia
Suite di test JUnit per verificare la correttezza delle routine DAO
21/06/2010 ViBiTech
19
Tecnologie Linguaggio di programmazione
◦ Java 1.6.0_20 Ambiente di sviluppo
◦ NetBeans 6.8
Generazione parser e scanner◦ JavaCC 5.0
Generazione documentazione della grammatica◦ JJDoc
Generazione APT e visitor◦ Java Tree Builder 1.3.2
Ambiente di test◦ JUnit 4.5
21/06/2010 ViBiTech
20
Limiti e caratteristiche non supportate
Assenza di un effettivo collegamento fra film e libri◦ Realizzare join fra tabelle e inserire
controlli semantici in caso sia presenti il campo facoltativo ( <CercaLibro> )?
La funzionalità di apertura di una scheda non produce alcun effetto grafico se non la generazione dell’APT◦ Predisporre finestra aggiuntiva che si
apra mostrando tutti i campi della scheda21/06/2010 ViBiTech
21
Sviluppi futuri... Interazione con il sistema unicamente attraverso
interfaccia grafica◦ Finestre che si aprono per l’immissione e la modifica
dei vari campi
Supporto a diverse modalità di gestione della persistenza
Arricchimento delle funzionalità fornite◦ Possibilità di visualizzare l’immagine della copertina se
inserita◦ Liste predefinite per il completamento di alcuni campi
“relativamente” standard: Autori tabella associata nel DB Principali editori Genere, Giudizio …
21/06/2010 ViBiTech
22
Demo
21/06/2010 ViBiTech
START