Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca...

22
Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio 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 Bologna Facoltà di Ingegneria

Transcript of Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca...

Page 1: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 2: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 3: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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;

}

Page 4: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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>)

Page 5: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 6: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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>

Page 7: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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 | &#128 | \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

Page 8: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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>

Page 9: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 10: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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 | &#128 | \u20ac )?

<PTOVIRG> )? ( GIUDIZIO <GIUDIZIO> <PTOVIRG> )?

( PROVENIENZA <Provenienza> )?

Page 11: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 12: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 13: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 14: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 15: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 16: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 17: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 18: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 19: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 20: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 21: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

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

Page 22: Studente: Veronica Conti Docente: Enrico Denti ViBiTech Linguaggio per la gestione di una videoteca e biblioteca domestica Progetto per lesame di Linguaggi.

22

Demo

21/06/2010 ViBiTech

START