La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte.

Presentazioni simili


Presentazione sul tema: "Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte."— Transcript della presentazione:

1 Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

2 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 dallutente finale Locandina File PDF 2

3 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 lanalisi 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 allutente nel modo più chiaro e dettagliato possibile 3

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

5 CINEMA { NOME: "Cinecity" INDIRIZZO { VIA: "Nazionale" N: 1 Cap: CITTA: "Pradamano (UD)" } SALE: 1 TEL: 0432/ 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 } CINEMA { NOME: "Cinecity" INDIRIZZO { VIA: "Nazionale" N: 1 Cap: CITTA: "Pradamano (UD)" } SALE: 1 TEL: 0432/ 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 } 5

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

7 Testo ::= "\"" ( )+ ( )* "\"" URI ::= "\"" ( "http://" )? ( )+ "\"" Data ::= "/" "/" Ora ::= ":" IntervalloDiTempo ::= Ora Ora Scope ::= ( Cinema )+ Cinema ::= Dati Giorno OrarioApertura ( Sala )+ Dati ::= "NOME:" Testo Indirizzo NumeroSale (NumeroParcheggi)? Telefono ( "SITO:" URI )* NumeroSale ::= "SALE:" NumeroParcheggi ::= "NUMPARCHEGGI:" Telefono ::= "TEL:" ( "/" )? ( )? Testo ::= "\"" ( )+ ( )* "\"" URI ::= "\"" ( "http://" )? ( )+ "\"" Data ::= "/" "/" Ora ::= ":" IntervalloDiTempo ::= Ora Ora Scope ::= ( Cinema )+ Cinema ::= Dati Giorno OrarioApertura ( Sala )+ Dati ::= "NOME:" Testo Indirizzo NumeroSale (NumeroParcheggi)? Telefono ( "SITO:" URI )* NumeroSale ::= "SALE:" NumeroParcheggi ::= "NUMPARCHEGGI:" Telefono ::= "TEL:" ( "/" )? ( )? 7 Stringhe e numeri Scope Dati sul cinema Notazione EBNF G = Parentesi graffa Uno o più cinema Barra opzionale

8 Indirizzo ::= Via Civico Cap Citta Via ::= ( | ) Testo Civico ::= Cap ::= Citta ::= "CITTA:" "\"" ( )+ (Provincia)?"\"" Provincia ::= "(" ") " Giorno ::= "GIORNO:" Data OrarioApertura ::= "ORARIOAP:" (IntervalloDiTempo | ) Indirizzo ::= Via Civico Cap Citta Via ::= ( | ) Testo Civico ::= Cap ::= Citta ::= "CITTA:" "\"" ( )+ (Provincia)?"\"" Provincia ::= "(" ") " Giorno ::= "GIORNO:" Data OrarioApertura ::= "ORARIOAP:" (IntervalloDiTempo | ) 8 Indirizzo Data e orario di apertura Cinema chiuso

9 Sala ::= NumeroSala CapienzaSala ( )? ( InfoFilm )* NumeroSala ::= "NUMSALA:" CapienzaSala ::= "POSTI:" InfoFilm ::= "FILM:" Testo ( )? "SPETTACOLI:" ( Ora )+ DurataFilm ( )? DurataFilm ::= "DURATA:" Sala ::= NumeroSala CapienzaSala ( )? ( InfoFilm )* NumeroSala ::= "NUMSALA:" CapienzaSala ::= "POSTI:" InfoFilm ::= "FILM:" Testo ( )? "SPETTACOLI:" ( Ora )+ DurataFilm ( )? DurataFilm ::= "DURATA:" 9 Info sulla sala Info sul film Assenti se sala è chiusa

10 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 10 A β A δ dove A є VN e δ,β є V +

11 Parser Scanner AST Sequenza di caratteri Sequenza di token Rappresentazione della frase 11 ParseCinemaToken Manager ParseCinema

12 AST TreeVisitor DataVisitor 12

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

14 Linguaggio Java (JDK ) 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 14

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

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

17 Nel package cinevisitor si trovano due implementazioni dellinterfaccia 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 17

18 Nel package gui troviamo 2 classi per la visualizzazione dellinterfaccia grafica e una di supporto per il syntax highlighting 18 Input accettato correttamenteErrore rilevato Area di input Albero Area di output

19 Rappresentazione in stile locandina 19 Rappresentazione in formato PDF

20 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 lerrore: Errore semantico: [Il numero delle sale definito non corrisponde a quello effettivo] 20

21 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 allinterfaccia Possibilità di visualizzare la locandina di più cinema Altri formati di output… 21


Scaricare ppt "Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte."

Presentazioni simili


Annunci Google