Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Professore: Studente: Enrico Denti Thomas Ricci
Linguaggio per la modellazione e presentazione web di eventi turistici a tappe. Attività progettuale per il corso di Linguaggi e Modelli Computazionali M Professore: Studente: Enrico Denti Thomas Ricci
2
Scopo del Progetto Sviluppo di un linguaggio semplice e intuitivo ma allo stesso flessibile e completo per la modellazione di un itinerario turistico riguardante un “evento a tappe”, al fine di automatizzare la generazione di una presentazione dell’itinerario con tecnologie Web 2.0: Migliorare l’esperienza di navigazione degli utenti web fornendo contenuti interattivi di qualità per la presentazione di un evento (piuttosto che semplici contenuti testuali).
3
Caratteristiche del linguaggio
3 tipologie di “evento a tappe”: RACE: Manifestazioni sportive su strada senza punti di sosta (gare ciclistiche, rally automobilistici,…). TOUR: Itinerari culturali/enogastronomici che prevedono punti di sosta con eventuale visita. SAIL-RACE: Regate. Il linguaggio consente di definire le informazioni generali sull’evento: Periodo evento Descrizione evento Elenco delle tappe previste … e quelle specifiche in base alla tipologia, come ad esempio: Statistiche di gara nel caso di eventi sportive. Informazioni culturali e contatti nel caso di itinerari per eventi culturali.
4
La Grammatica TOKEN: A_GR : '{' ; C_GR : '}' ;
fragment DIGIT : ( '0'..'9'); INT : DIGIT+; FLOAT : DIGIT+ '.' DIGIT+; DATE : DIGIT DIGIT '/' DIGIT DIGIT '/' (DIGIT DIGIT | DIGIT DIGIT DIGIT DIGIT); ORARIO : DIGIT DIGIT ':' DIGIT DIGIT; STRING: '"' ( ESC_SEQ | ~('\\'|'"') )* '"'; fragment HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ; fragment ESC_SEQ : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') | UNICODE_ESC | OCTAL_ESC; fragment OCTAL_ESC: '\\' ('0'..'3') ('0'..'7') ('0'..'7‘)| '\\' ('0'..'7') ('0'..'7')| '\\' ('0'..'7'); fragment UNICODE_ESC : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT; WS : ( ‘ ‘ | ‘\t’ | ‘\r‘ | ‘\n‘ ) {$channel=HIDDEN;};
5
La Grammatica TOKEN: EVENT='event'; TOUR='tour'; RACE='race';
SAIL='sail'; BOA='boa'; DEST='dest'; STAGE='stage'; LAP='lap'; DEP='departure'; ARR='arrival'; DISLIV='disliv'; KM='km'; KM_TOT='km_tot'; MI='mi'; PEND_PRC='pend_%'; PEND_MAX='pend_max'; ALT='alt'; TEL='tel'; =' '; WEB='website'; RIST='restaurant'; MED='firstAid'; MEC='mechanic'; GAS='gas'; INFO='info'; DATA='data'; TIME='h'; BIKE='bike'; CAR='car'; IMG='img'; COORD='coordinates'; LNG='lng'; LAT='lat'; ADDR='addr';
6
La Grammatica G = <VT, VN, P, S> PRODUZIONI:
s ::= <EVENT> <STRING> <A_GR> description period ( race| tour | sail_race ) <C_GR> Lo scopo della grammatica è il simbolo non terminale s e la relativa produzione prevede che un evento inizi con la keyword “event” seguita da: Nome evento Descrizione dell’evento description ::= <INFO> <STRING> Periodo evento period ::= <DATA> (<DATE> | “da” <DATE> “a” <DATE>) Tipologia di evento… Esempio: event “Giro d’Italia 2011” { info “…descrizione dell’evento…” data da 20/05/11 a 22/05/11 […tipo evento: tour|race|sail_race…] }
7
race ::= <RACE> <A_GR> ( stage| poi )+ <C_GR>
La Grammatica: Race race ::= <RACE> <A_GR> ( stage| poi )+ <C_GR> Una race rappresenta una manifestazione sportiva a tappe che non prevede punti di sosta lungo il percorso ma solo: Tratti di gara stage ::= <STAGE> (“by” (<BIKE> | <CAR>))? <STRING> <A_GR> partenza (indirizzo)* arrivo (period)? (km_tot)? ( pend_prc )? ( pend_max )? ( disliv )? description <C_GR> Points of Interests (non necessariamente sul percorso) poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING><A_GR> <Indirizzo> (contatti )? <C_GR>
8
stage ::= <STAGE> (“by” (<BIKE> | <CAR>))
stage ::= <STAGE> (“by” (<BIKE> | <CAR>))? <STRING> <A_GR> partenza (indirizzo)* arrivo (period)? (km_tot)? ( pend_prc )? ( pend_max )? ( disliv )? description <C_GR> km_tot ::= <KM_TOT> (<INT>|<FLOAT>) alt ::= <ALT> (<FLOAT>|<INT>) disliv ::= <DISLIV> (<FLOAT>|<INT>) pend_prc ::= <PEND_PRC> <FLOAT> pend_max ::= <PEND_MAX> <INT> La Grammatica: Race Esempio: race { stage by bike "Cesenatico - Polenta“ { departure "Portocanale di Cesenatico“ { addr "via Cesenatico 10, Cesenatico" h 05: img “ } addr "Via San Pellegrino 5, Cesenatico“ addr "Via Collinello, Bertinoro" arrival "Polenta“ { addr "via Polenta 477, Polenta, Bertinoro“ km 37 alt 287 data 20/05/10 km_tot 34 pend_% 3.06 pend_max 13 disliv 284 info "Dopo essersi lasciati alle spalle il mare di Cesenatico,...“ firstAid "Ospedale Bufalini" { addr "viale Ghirotti 286, Cesena" tel website " cesena.emr.it"} partenza ::= <DEP> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? ( img )? <C_GR> poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> indirizzo ( contatti )? <C_GR> contatti ::= (tel | | web)+ tel ::= <TEL> <INT> := < > <STRING> web ::= <WEB> <STRING> indirizzo ::= <ADDR> <STRING> arrivo ::= <ARR> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? ( img )? <C_GR>
9
( disliv )? description <C_GR>
La Grammatica: Tour tour ::= <TOUR> <A_GR> ( destination | stage | poi )+ <C_GR> Un tour rappresenta un evento con eventuali mete da visitare lungo il percorso (esempi: tour culturali/enogastronomici, raduni d’auto d’epoca, …). Un tour prevede la possibilità di definire: Punti di sosta di rilevanza turistica. destination ::= <DEST> <STRING> <A_GR> indirizzo (km)? (contatti)? (period)? description> (<img>)? <C_GR> Percorsi per raggiungere le destinazioni / eventuali tratti di gara (es. raduni auto d’epoca). stage ::= <STAGE> (“by” (<BIKE> | <CAR>))? <STRING> <A_GR> partenza (indirizzo)* arrivo (period)? (km_tot)? ( pend_prc )? ( pend_max )? ( disliv )? description <C_GR> Points of Interests (non necessariamente sul percorso) poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> <Indirizzo> (contatti )? <C_GR>
10
La Grammatica: Tour Esempio:
dest “Museo della Marineria di Cesenatico” { addr "via Cesenatico 10, Cesenatico" km 10 tel date 31/10/10 info “museo allestito sul portocanale di Cesenatico…“ img “ } gas “Distributore ESSO“ { addr “Statale Adriatica, Tagliata di Cervia" tel … destination ::= <DEST> <STRING> <A_GR> indirizzo (km)? (contatti)? (period)? description (<img>)? <C_GR> description ::= <INFO> <STRING> img ::= <IMG> <STRING> contatti ::= (tel | | web)+ tel ::= <TEL> <INT> := < ><STRING> web ::= <WEB> <STRING> km ::= <KM> (<FLOAT>|<INT>) poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> indirizzo ( contatti )? <C_GR>
11
La Grammatica: Sail Race
sail_race ::= <SAIL> <A_GR> ( lap | poi )+ <C_GR> Una sail race rappresenta una regata ed è costituita da una serie di: Rotte della regata: lap ::= <LAP> <STRING> <A_GR> partenza ( coordinates | boa )+ arrivo ( description )? <C_GR> Points of Interests (non necessariamente sul percorso) poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> <Indirizzo> (contatti )? <C_GR>
12
La Grammatica: Sail Race
sail{ lap "Tappa Cesenatico-Cervia“ { departure "Congrega Velisti Cesenatico" { coordinates { lat lng } } coordinates { lat lng } boa { coordinates { lat lng } } coordinates { lat lng } coordinates { lat lng } arrival "Portocanale di Cervia“ { coordinates { lat lng } } info "La prima tappa della regata prevede il raggiungimento del portocanale di Cervia." restaurant “Ristorante da Urbano" addr "via Lungomare Ponente 1, Cesenatico" tel coordinates ::= <COORD> <A_GR> lat lng <C_GR> lat ::= <LAT> <FLOAT> lng ::= <LNG> <FLOAT> boa ::= <BOA> <A_GR> coordinates ( miles )? <C_GR> coordinates ::= <COORD> <A_GR> lat lng <C_GR> lat ::= <LAT> <FLOAT> lng ::= <LNG> <FLOAT> miles ::= <MI> (<FLOAT>|<INT>) Esempio: Per la costruzione del percorso della regata tramite coordinate (semplici punti intermedi) e boe. lap ::= <LAP> <STRING> <A_GR> partenza ( coordinates | boa )+ arrivo ( description )? <C_GR> partenza ::= <DEP> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? ( img )? <C_GR> arrivo ::= <ARR> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? ( img )? <C_GR>
13
La Grammatica G = <VT, VN, P, S>
PRODUZIONI: s ::= <EVENT> <STRING> <A_GR> description period ( tour | race | sail_race ) <C_GR> tour ::= <TOUR> <A_GR> ( destination | stage | poi )+ <C_GR> race ::= <RACE> <A_GR> ( stage| poi )+ <C_GR> sail_race ::= <SAIL> <A_GR> ( lap | poi )+ <C_GR> destination ::= <DEST> <STRING> <A_GR> indirizzo (km)? (contatti)? (period)? description> (<Img>)? <C_GR> stage ::= <STAGE> (“by” (<BIKE> | <CAR>))? <STRING> <A_GR> partenza (indirizzo)* arrivo (period)? (km_tot)? ( pend_prc )? ( pend_max )? ( disliv )? description <C_GR> lap ::= <LAP> <STRING> <A_GR> partenza ( coordinates | boa )+ arrivo (description)? <C_GR> partenza ::= <DEP> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? (img )? <C_GR> arrivo ::= <ARR> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? (img )? <C_GR> poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> <Indirizzo> (contatti)? <C_GR> boa ::= <BOA> <A_GR> coordinates ( miles )? <C_GR>
14
La Grammatica description ::= <INFO> <STRING>
indirizzo ::= <ADDR> <STRING> period ::= <DATA> (<DATE> | “da” <DATE> “a” <DATE>) time ::= <TIME> <ORARIO> coordinates ::= <COORD> <A_GR> lat lng <C_GR> lat ::= <LAT> <FLOAT> lng ::= <LNG> <FLOAT> miles ::= <MI> (<FLOAT>|<INT>) km ::= <KM> (<FLOAT>|<INT>) km_tot ::= <KM_TOT> (<INT>|<FLOAT>) alt ::= <ALT> (<FLOAT>|<INT>) disliv ::= <DISLIV> (<FLOAT>|<INT>) pend_prc ::= <PEND_PRC> <FLOAT> pend_max ::= <PEND_MAX> <INT> img ::= <IMG> <STRING> contatti ::= (tel | | web)+ tel ::= <TEL> <INT> := < > <STRING> web ::= <WEB> <STRING>
15
Analisi della Grammatica
La grammatica è di tipo 2 (context free) secondo la classificazione di Chomsky in quanto le produzioni sono vincolate alla forma: … tuttavia non sono presenti produzioni con self-embedding … pertanto il linguaggio è regolare (tipo 3) A → α con α є (VT U VN)* ed A є VN A → α1 A α2 con A є VN e α1, α2 є (VN U VT)+
16
Analisi della Grammatica
La grammatica è LL(1)? Una grammatica context-free è LL(1) se per ogni metasimbolo che compare nella parte sinistra di più produzioni alternative, i DIRECTOR SYMBOLS relativi a tali produzioni sono disgiunti. Grammatica è LL(1) grammatica LL(1) è caratterizzata dalla possibilità di analizzare la frasi Left to right applicando la Left-most derivation utilizzando al più 1 simbolo della frase per scegliere con certezza la produzione opportuna per la riscrittura. SS(α) se α non genera mai ε-rules DS(A → α) SS(α) U FOLLOW(A) se α può generare ε-rules
17
Strumenti Utilizzati Linguaggio di programmazione: IDE di sviluppo:
C# IDE di sviluppo: Visual Studio 2010 Piattaforma web: ASP .Net 4.0 Strumento per generazione automatica di Lexer e Parser: ANTLR 3.0 Strumenti di supporto per la valutazione del linguaggio: Web Services: Google Geocoding API Google Directions API
18
Architettura: Package
Il progetto è stato implementato con una Class Library, EventiATappeLib.dll, che verrà poi utilizzata all’interno di una applicazione web ASP.Net per generare contenuti.
19
Architettura: Nodi AST
Antlr 3.0 non implementa più Pattern Visitor per la valutazione dell’AST… Estensione della classe CommonTree che rappresenta il generico nodo dell’AST Package AST: alcuni nodi…
20
Architettura del Sistema
21
Editor Web del linguaggio
22
Funzionamento del Sistema
LEXER Tokens PARSER AST
23
Valutazioni KmlVisitor
Keyhole Markup Language XML based e condivide parte della grammatica di GML dell’Open Geospatial Consortium (standard ISO). Linguaggio proprietario di Google per la definizione di mappe interattive utilizzate in Google Maps e Google Earth. KmlVisitor JavaScript Object Notation Linguaggio standard IETF per la definizione di oggetti JavaScript. l'interprete JavaScript è in grado di eseguire il parsing di una stringa Json tramite una semplice chiamata alla funzione eval() che restituisce l’oggetto JavaScript rappresentato. Molto utilizzato in ambito Web con teconologia Ajax per lo scambio di dati al posto di XML perché più leggero. JsonVisitor AST HtmlVisitor
24
Verifica Semantica delle frasi
Errori lessicali e sintattici vengono rilevati direttamente da Lexer e Parser tramite le eccezioni predefinite di Antlr. Errori semantici gestiti: Verifica correttezza date e orari. Verifica esistenza indirizzo richiesto a Google Geocoding Verifica correttezza sintattica URL immagine Verifica correttezza sintattica indirizzi
25
Collaudo Per il collaudo sono stati realizzati alcuni esempi delle tre tipologie di evento… tra cui un evento ciclistico reale! I contenuti web della Nove Colli 2011 ad un mese dalla pubblicazione, hanno avuto un notevole successo: Apprezzamento degli utenti web che hanno manifestato un grande interesse per l’evento in termini di visite alla pagina e richieste di prenotazione nel periodo dell’evento.
26
Sviluppi futuri Limiti: Sviluppi Futuri:
Contenuti attualmente presentati prevalentemente testuali… manca la possibilità di introdurre video e photogallery dell’evento. Sviluppi Futuri: Estensioni del linguaggio per integrare informazioni sull’evento: Mash-up con Wikipedia per integrare informazioni turistiche. Aggiunta contenuti multimediali da Youtube e Flickr Potenziamento sezione gestionale nel CMS al fine di affiancare all’attuale editor del linguaggio un wizard per l’inserzione nuovi eventi che generi in modo trasparente all’utente le frasi del linguaggio.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.