Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte.
-
Upload
teofila-antonini -
Category
Documents
-
view
213 -
download
0
Transcript of Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte.
CINEMANLINGUAGGIO PER LA DESCRIZIONE
DELLA PROGRAMMAZIONE DI CINEMA
Progetto di Linguaggi e Modelli Computazionali LS
Andrea Decorte
2
OBIETTIVI Progettare un linguaggio per la
descrizione della programmazione giornaliera di cinemaTale linguaggio deve essere completo ma
comprensibile Lo scopo sarà quello di produrre una o
più rappresentazioni direttamente utilizzabili dall’utente finaleLocandinaFile 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 LINGUAGGIOLinguaggio 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 BASECINEMA {
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 Ore (e intervalli)
Due numeri separati dai due punti Date
3 numeri separati da barreFormato dd/MM/yyyyControlli a livello semantico se data è
valida Stringhe
Racchiuse tra virgolettePossibilità di includere trattini e caratteri
accentati (utili per i titoli dei film)
<NUM: ([“0”-”9”])+>
<STRINGA: (["A"-"Z","a"-"z","0"-"9","_","\'",".","à","è","é","ò","ù", "ç","ì","È","-"])+>
7
GRAMMATICA (1/3)Testo ::= "\"" ( <STRINGA> )+ ( <NUM> )* "\""URI ::= "\"" ( "http://" )? ( <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
Scope
Dati sul cinema
Notazione EBNF G = < VT, VN, P, S >
Parentesi graffa
Uno o più 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>)
Indirizzo
Data e orario di apertura
<VIA: "Via:" | "VIA:" | "VIALE:" | "CORSO:">
Cinema chiuso
<PROV: ["A"-"Z"] ["A"-"Z"]>
9
GRAMMATICA (3/3)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 sullasala
Info sulfilm
Assenti se sala è chiusa
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)
Parser
Scanner
AST
Sequenza di caratteri
Sequenza di token
Rappresentazione della frase
ParseCinemaTokenManager
ParseCinema
12
SCHEMA FUNZIONAMENTO (2/2)
AST
TreeVisitor
DataVisitor
13
CONTROLLI SEMANTICI Nel DataVisitor vengono effettuati
alcuni controlli sulla correttezza semanticaNumero sale corrispondente a quelle
descritteNessun film proiettato in caso di chiusuraControllo sulla correttezza di orari e dateControllo su CAPVerifica 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.javaData.javaFilm.java
Indirizzo.javaSala.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
18
GUI (1/2)Nel package gui troviamo 2 classi per la visualizzazione
dell’interfaccia grafica e una di supporto per il syntax highlighting
Input accettato correttamente Errore rilevato
Area di
input
Albero
Area di
output
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’interfacciaPossibilità di visualizzare la locandina di
più cinemaAltri formati di output…