La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Linguaggio per la gestione di una videoteca e biblioteca domestica

Presentazioni simili


Presentazione sul tema: "Linguaggio per la gestione di una videoteca e biblioteca domestica"— Transcript della presentazione:

1 Linguaggio per la gestione di una videoteca e biblioteca domestica
Università degli Studi di Bologna Facoltà di Ingegneria ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per l’esame di Linguaggi e Modelli Computazionali L-S Studente: Veronica Conti Docente: Enrico Denti Anno Accademico 2008/2009

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: esempio Esempio di inserimento di un nuovo libro
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 € ; PROVENIENZA comprato da: NOME "Veronica"; COGNOME "Conti"; NRTEL ; il: 22/02/2010; } 21/06/2010 ViBiTech

4 Grammatica – NON TERMINALI1
Scopo: punto di partenza per ogni interazione col sistema Scelta dell’operazione eseguire <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>) 21/06/2010 ViBiTech

5 Grammatica – NON TERMINALI2
Inserimento di una nuova scheda Campi che qualificano una nuova scheda libro <Inserisci> ::= inserisci (<Libro> | <Film>) <Libro> ::= libro <SGRAF> TITOLO <STRINGA> <PTOVIRG> AUTORE <STRINGA> <PTOVIRG> EDITORE <STRINGA> <PTOVIRG> GENERE <STRINGA> <PTOVIRG> <CampiFacoltativiLibri> <DGRAF> Campi che qualificano una nuova scheda film <Film> ::= film <SGRAF> TITOLO <STRINGA> <PTOVIRG> REGISTA <STRINGA> <PTOVIRG> DURATA <NUM> ( \' | min ) ( . )? <PTOVIRG> GENERE <STRINGA> <PTOVIRG> <CampiFacoltativiFilm> <DGRAF> 21/06/2010 ViBiTech

6 Grammatica – NON TERMINALI3
Apertura di una scheda esistente Produzioni per il ritrovamento di una scheda in base al titolo <ApriScheda> ::= apriScheda (<CercaLibro> | <CercaFilm>) <CercaLibro> ::= libro <SGRAF> TITOLO <STRINGA> <PTOVIRG> <DGRAF> <CercaFilm> ::= film 21/06/2010 ViBiTech

7 Grammatica – NON TERMINALI4
Aggiornamento dei campi facoltativi <Aggiorna> ::= aggiorna (<AggiornaLibro> | <AggiornaFilm>) <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 | &#128 | \u20ac )? <PTOVIRG> )? ( GIUDIZIO <GIUDIZIO> <PTOVIRG> )? ( PROVENIENZA <Provenienza> )? <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> )? <Provenienza> ::= ( regalato | comprato ) da <DUEPTI> <Persona> il <DUEPTI> <Data> Possibilità di associare il titolo di un libro al film 21/06/2010 ViBiTech

8 Grammatica – NON TERMINALI5
Gestione dei prestiti e della rimozione <Prestito> ::= prestito (<CercaLibro> | <CercaFilm>) a <SGRAF> <Persona> <DGRAF> il <SGRAF> <Data><DGRAF> <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> <Rimuovi> ::= rimuovi ( <RimuoviPrestito> | <CercaLibro> | <CercaFilm>) <RimuoviPrestito> ::= prestito ( <CercaLibro> | <CercaFilm> ) 21/06/2010 ViBiTech

9 Grammatica – TOKEN Parole chiave del linguaggio:
Per delimitare blocchi logici <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 descrivere l’URL di un’immagine di copertina Per la definizione di stringhe Per la definizione di numeri 21/06/2010 ViBiTech

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 <CampiFacoltativiLibro> ::= ( COLLANA <STRINGA> <PTOVIRG> )? ( ANNO <NUM> <PTOVIRG> )? ( NRPAG <NUM> <PTOVIRG> )? ( ISBN <ISBN> <PTOVIRG> )? ( TRAMA ( <STRINGA> )+ <PTOVIRG> )? ( COPERTINA <IMGPERCORSO> <PTOVIRG> )? ( COSTO <FLOAT> ( euro | &#128 | \u20ac )?<PTOVIRG> )? ( GIUDIZIO <GIUDIZIO> <PTOVIRG> )? ( PROVENIENZA <Provenienza> )? 21/06/2010 ViBiTech

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
Package generato in automatico da JTB contenente interfaccia del visitor e implementazione con visita DepthFirst Effettuano l’analisi semantica visitando l’AST grazie al meccanismo del Double Dispatch. Due differenti funzioni di interpretazione… Scanner generato in automatico da JavaCC; individua i singoli token File.vbt Package generato in automatico da JTB a partire dal file di specifica della grammatica AST Parser generato in automatico da JavaCC; effettua l’analisi sintattica etc … 21/06/2010 ViBiTech

13 Architettura del sistema2
Analisi semantica realizzata dai Visitor ViBiTechVisitor Controllo coerenza con la base 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 del package 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 Logica di accesso ai dati: If stabiliscono metodi read/write Implementazione JDBC: astrazione dallo specifico DB sottostante Pattern creazionale Pattern creazionale Pattern creazionale Implementazioni in accordo allo specifico DB Logica di business 21/06/2010 ViBiTech

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 Visualizzazione a tabelle dei dati esistenti
Tasti rapidi per l’inserimento di strutture predefinite dei comandi testuali Albero rappresentante l’esecuzione di un comando Area per l’inserimento dei comandi in forma testuale Syntax highlighting Area di notifica per eventuali messaggi di errore 21/06/2010 ViBiTech

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 Ambiente di sviluppo
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 scheda 21/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 START 21/06/2010 ViBiTech


Scaricare ppt "Linguaggio per la gestione di una videoteca e biblioteca domestica"

Presentazioni simili


Annunci Google