1 / 21

CineMan Linguaggio per la descrizione della programmazione di cinema

CineMan Linguaggio per la descrizione della programmazione di cinema. Andrea Decorte. Progetto di Linguaggi e Modelli Computazionali LS. Obiettivi. Progettare un linguaggio per la descrizione della programmazione giornaliera di cinema Tale linguaggio deve essere completo ma comprensibile

lelia
Download Presentation

CineMan Linguaggio per la descrizione della programmazione di cinema

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. CineManLinguaggio 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: 33040 CITTA: "Pradamano (UD)" } SALE: 1 TEL: 0432/2409500 SITO: "http://udine.cinecity.it" 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. 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) <STRINGA: (["A"-"Z","a"-"z","0"-"9","_","\'",".","à","è","é","ò","ù","ç","ì","È","-"])+>

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

  8. Grammatica (2/3) Indirizzo ::= <INDIRIZZO> <LBRACE> Via CivicoCapCitta <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. Grammatica (3/3) Assenti se sala è chiusa Sala ::= <SALA> <LBRACE> NumeroSalaCapienzaSala (<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+

  11. Schema funzionamento (1/2) ParseCinemaTokenManager Sequenza di caratteri Scanner Sequenza di token ParseCinema AST Parser Rappresentazione della frase

  12. Schema funzionamento (2/2) TreeVisitor AST 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) 1.3.2 per la creazione dei visitor di base • Libreria iText 5.0.2 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 doubledispatch

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

  19. 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…

More Related