La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

CineMan Linguaggio per la descrizione della programmazione di cinema

Presentazioni simili


Presentazione sul tema: "CineMan Linguaggio per la descrizione della programmazione di cinema"— Transcript della presentazione:

1 CineMan Linguaggio per la descrizione della programmazione di cinema
Andrea Decorte Progetto di Linguaggi e Modelli Computazionali LS

2 Obiettivi Progettare un linguaggio per la descrizione della programmazione giornaliera di cinema Tale linguaggio deve essere completo ma comprensibile Lo scopo sarà quello di produrre una o più rappresentazioni direttamente utilizzabili dall’utente finale Locandina File PDF

3 Analisi del problema Si dovrà quindi realizzare un interprete per tale linguaggio che prenda in input una stringa di caratteri Inserita direttamente nella finestra del programma Caricata da un file di testo Esso dovrà effettuare l’analisi sintattica e di seguito quella semantica Nel caso tutte le operazioni abbiano esito positivo verrà prodotta una rappresentazione adeguata In caso di errore esso verrà segnalato all’utente nel modo più chiaro e dettagliato possibile

4 Caratteristiche linguaggio
Linguaggio dovrà permettere di specificare Informazioni generali sul cinema indirizzo disponibilità parcheggi numero sale Orari di apertura Programmazione delle diverse sale Per ogni film in programmazione possibilità di inserire le informazioni di base (titolo, durata, divieti …) Flessibilità (più film per sala, sale chiuse)

5 Esempio di base CINEMA { NOME: "Cinecity" INDIRIZZO { VIA: "Nazionale" N: 1 Cap: CITTA: "Pradamano (UD)" } SALE: 1 TEL: 0432/ SITO: " GIORNO: 26/04/2010 ORARIOAP: 15:00 01:00 SALA { NUMSALA: 1 POSTI: 470 FILM: "Scontro tra titani" SPETTACOLI: 17:30 20:00 22:30 DURATA: 101

6 <NUM: ([“0”-”9”])+>
Alcuni dettagli <NUM: ([“0”-”9”])+> Ore (e intervalli) Due numeri separati dai due punti Date 3 numeri separati da barre Formato dd/MM/yyyy Controlli a livello semantico se data è valida Stringhe Racchiuse tra virgolette Possibilità di includere trattini e caratteri accentati (utili per i titoli dei film) Check formato data <STRINGA: (["A"-"Z","a"-"z","0"-"9","_","\'",".","à","è","é","ò","ù", "ç","ì","È","-"])+>

7 Grammatica (1/3) Notazione EBNF G = < VT, VN, P, S > Testo ::= "\"" ( <STRINGA> )+ ( <NUM> )* "\"" URI ::= "\"" ( " )? ( <STRINGA> )+ "\"" Data ::= <NUM> "/" <NUM> "/" <NUM> Ora ::= <NUM> ":" <NUM> IntervalloDiTempo ::= Ora Ora Scope ::= <CINEMA> <LBRACE> ( Cinema )+ <RBRACE> Cinema ::= Dati Giorno OrarioApertura ( Sala )+ Dati ::= "NOME:" Testo Indirizzo NumeroSale (NumeroParcheggi)? Telefono ( "SITO:" URI )* NumeroSale ::= "SALE:" <NUM> NumeroParcheggi ::= "NUMPARCHEGGI:" <NUM> Telefono ::= "TEL:" <NUM> ( "/" )? ( <NUM> )? Stringhe e numeri Parentesi graffa Scope Uno o più cinema Non terminali Dati sul cinema Barra opzionale

8 Grammatica (2/3) Indirizzo ::= <INDIRIZZO> <LBRACE> Via Civico Cap Citta <RBRACE> Via ::= ( <VIA> | <PIAZZA> ) Testo Civico ::= <CIVICO> <NUM> Cap ::= <CAP> <NUM> Citta ::= "CITTA:" "\"" (<STRINGA>)+ (Provincia)?"\"" Provincia ::= "(" <PROV> ") " Giorno ::= "GIORNO:" Data OrarioApertura ::= "ORARIOAP:" (IntervalloDiTempo |<CHIUSO>) <VIA: "Via:" | "VIA:" | "VIALE:" | "CORSO:"> Indirizzo <PROV: ["A"-"Z"] ["A"-"Z"]> Data e orario di apertura Cinema chiuso

9 Assenti se sala è chiusa
Grammatica (3/3) Assenti se sala è chiusa Sala ::= <SALA> <LBRACE> NumeroSala CapienzaSala (<CHIUSO>)? ( InfoFilm )* <RBRACE> NumeroSala ::= "NUMSALA:" <NUM> CapienzaSala ::= "POSTI:" <NUM> InfoFilm ::= "FILM:" Testo ( <FILM3D> )? "SPETTACOLI:" ( Ora )+ DurataFilm (<VM14>)? DurataFilm ::= "DURATA:" <NUM> Info sulla sala Info sul film

10 Tipologia di grammatica
Grammatica di tipo 2 (context-free) secondo classificazione di Chomsky, cioè Il linguaggio generato è di tipo 3; no self- embedding, ovvero presenza di simboli non terminali autoinclusivi del tipo LL(1) perché nessuna produzione genera stringa vuota e gli insiemi degli starter symbols corrispondenti alla parte destra delle produzioni alternative di uno stesso metasimbolo sono tra loro disgiunti A → α con α є (VT U VN)* e A є VN A → β A δ dove A є VN e δ,β є V+ Condizione necessaria e sufficiente affinché una grammatica sia LL(1), poiché la grammatica è priva di ε – rules, è che per ogni metasimbolo, che appare alla sinistra di più produzioni, gli starter symbol corrispondenti alle parti destre delle produzioni alternative siano disgiunti. Si può dunque concludere che siamo in presenza di una GRAMMATICA LL(1) Per quanto riguarda le parentesi graffe, non vi è self-embedding: una sola parentesi iniziale ed una sola finale in entrambi i casi. Nessun livello di nesting di cui tenere conto. PDA deterministico->analisi top down

11 Schema funzionamento (1/2)
ParseCinemaTokenManager Sequenza di caratteri Scanner Sequenza di token ParseCinema Abstract Syntax tree: elimino nodi non indispensabili AST Parser Rappresentazione della frase

12 Schema funzionamento (2/2)
TreeVisitor AST Visitor = funzioni di interpretazione delle frasi dei linguaggi DataVisitor

13 Controlli semantici Nel DataVisitor vengono effettuati alcuni controlli sulla correttezza semantica Numero sale corrispondente a quelle descritte Nessun film proiettato in caso di chiusura Controllo sulla correttezza di orari e date Controllo su CAP Verifica che URL sia valida

14 Strumenti utilizzati Linguaggio Java (JDK 1.6.17)
NetBeans 6.8 come ambiente di sviluppo JavaCC 5.0 per il parser, sfruttando JJDoc per la creazione automatica di documentazione Java Tree Builder (JTB) per la creazione dei visitor di base Libreria iText per la creazione di file PDF

15 Architettura (1/2) I package sono stati suddivisi in 2 parti
Contengono le classi create in automatico dagli strumenti usati a partire dalla grammatica Il package parser contiene il parser prodotto in output da JavaCC I package visitor e syntaxtree vengono invece prodotti da JTB visitor: interfaccia del visitor base e implementazioni di default syntaxtree: una classe Java per ogni produzione della grammatica

16 Architettura (2/2) Questi package sono stati invece sviluppati manualmente Il package cineman contiene le classi per rappresentare la struttura in memoria Cinema.java Data.java Film.java Indirizzo.java Sala.java CinemaException.java

17 Visitor Nel package cinevisitor si trovano due implementazioni dell’interfaccia Visitor prodotta da JTB DataVisitor Si occupa di effettuare i controlli semantici necessari Produce una rappresentazione corrispondente TreeVisitor Richiamato se il DataVisitor non ha rilevato errori Produce una rappresentazione ad albero del contenuto Ciascun visitor realizza una visita di tipo depth first avvalendosi del meccanismo del double dispatch Un oggetto Visitor localizza la funzione di valutazione seguendo l’approccio funzionale e fornendo l’operazione chiamata di solito visit Sono possibili tante versioni della stessa funzione di valutazione quante le classi della tassonomia, seguendo l’approccio object-oriented (oveloading visit)

18 GUI (1/2) Nel package gui troviamo 2 classi per la visualizzazione dell’interfaccia grafica e una di supporto per il syntax highlighting Albero Area di input Area di output Input accettato correttamente Errore rilevato

19 Rappresentazione in stile locandina Rappresentazione in formato PDF
GUI (2/2) Rappresentazione in stile locandina Rappresentazione in formato PDF

20 Prove effettuate Sono stati effettuati diversi test su programmazioni reali di cinema, anche prevedendo di avere in input più cinema Il sistema ha gestito correttamente sia errori sintattici: POSTO: 25 il parser segnala un errore indicando anche la riga in quanto si aspetta POSTI: Che errori semantici: Se definisco SALE: 1 ma poi ne inserisco 2, il DataVisitor mi segnala l’errore: Errore semantico: [Il numero delle sale definito non corrisponde a quello effettivo]

21 Limiti e sviluppi futuri
Possibile estensione delle informazioni prese in considerazione (link a una scheda descrittiva di un film, prezzi e sconti…) Aggiunta di strumenti per facilitare inserimento dei dati e il loro aggiornamento Miglioramenti all’interfaccia Possibilità di visualizzare la locandina di più cinema Altri formati di output… Interfacciarsi con DB per recuperare info Linguaggio verboso


Scaricare ppt "CineMan Linguaggio per la descrizione della programmazione di cinema"

Presentazioni simili


Annunci Google