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

Transcript of Progetto di Linguaggi e Modelli Computazionali LS Andrea Decorte.

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…