1 / 22

ViBiTech

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.

gin
Download Presentation

ViBiTech

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 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 13.50 € ; PROVENIENZAcomprato da: NOME "Veronica"; COGNOME "Conti"; NRTEL 3343211062; il: 22/02/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>) 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> 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 <SGRAF> TITOLO <STRINGA> <PTOVIRG> <DGRAF> 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 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> ) 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 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> )? 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 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 DoubleDispatch. 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… ViBiTech

  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.treeomettendo produzioni non significative 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 creazionaleFactory 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 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 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 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 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 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 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 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 … ViBiTech

  22. Demo START ViBiTech

More Related