progetto di linguaggi e modelli computazionali ls andrea decorte

21
CINEMAN LINGUAGGIO PER LA DESCRIZIONE DELLA PROGRAMMAZIONE DI CINEMA Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

Upload: teofila-antonini

Post on 02-May-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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

Page 2: 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

Page 3: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

Page 4: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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)

Page 5: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

}

}

Page 6: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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","_","\'",".","à","è","é","ò","ù", "ç","ì","È","-"])+>

Page 7: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

Page 8: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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"]>

Page 9: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

Page 10: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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+

Page 11: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

11

SCHEMA FUNZIONAMENTO (1/2)

Parser

Scanner

AST

Sequenza di caratteri

Sequenza di token

Rappresentazione della frase

ParseCinemaTokenManager

ParseCinema

Page 12: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

12

SCHEMA FUNZIONAMENTO (2/2)

AST

TreeVisitor

DataVisitor

Page 13: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

Page 14: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

Page 15: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

Page 16: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

Page 17: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

Page 18: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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

Page 19: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

19

GUI (2/2)

Rappresentazione in stile locandina Rappresentazione in formato PDF

Page 20: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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]

Page 21: Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte

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…