1 / 33

Itinerari sm Tool per itinerari turistici nella repubblica di san marino

Itinerari sm Tool per itinerari turistici nella repubblica di san marino. Progetto per l’esame di “Linguaggi e Modelli Computazionali LS”. Chiara Gualtieri. Obiettivo.

ehren
Download Presentation

Itinerari sm Tool per itinerari turistici nella repubblica di san marino

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Itinerari smTool per itinerari turistici nella repubblica di san marino Progetto per l’esame di “Linguaggi e Modelli Computazionali LS” ChiaraGualtieri

  2. Obiettivo • Sviluppo di un semplice linguaggio perla descrizione di unitinerario turistico nel centro storico di RSM il quale prevede le seguenti attività: • Visita di un museo • Visita di una chiesa • Visita a un monumento • Visita di un punto panoramico • Visita libera per negozi • Pranzo presso un ristorante

  3. Workflow • Definizione di un linguaggio in grado di descrivere le attività previste per creare un itinerario. • Realizzare un’interprete per tale linguaggio che: • accetti in ingresso una stringa di caratteri • esegua un’analisi sintattica al fine di riconoscere se la stringa è una frase lecita del linguaggio • esegua le azioni corrispondenti alla semantica della frase immessa • Realizzazione di una rappresentazionesotto forma di albero • Realizzare uno strumento grafico che visualizzi le attività previste nell’itinerario e le informazioni relative ad esse

  4. Grammatica (1/5) • <S> ::= inizio <Visita> fine • <Visita> ::= Partenza prevista in: <Nome> <Coordinate> alle <Ora> del giorno <Data > <Tipo> • <Nome> ::= ( <PAROLA> )+ • <Descrizione> ::= ( <PAROLA> )+ • <Data> ::= <NUMERO> /<NUMERO> / <NUMERO> • <Ora> ::= ore <NUMERO> : <NUMERO> • <Tipo> ::= <Turistico> | <Culturale> | <Misto> • <Culturale> ::= Itinerario Culturale: ( <TappaCul> )+ • <Turistico> ::= Itinerario Turistico: ( <TappaTur >| <VisitaNegozi >)+ • <Misto> ::= Itinerario Misto: ( <Tappa> | <VisitaNegozi> )+ • <TappaTur> ::= ( <TAPPATUR> | Ristorante: ) <InfoTappa> • <TappaCul >::= ( <TAPPACUL> | Ristorante: ) <InfoTappa> • <Tappa> ::= ( <TAPPACUL> | <TAPPATUR> | Ristorante: ) <InfoTappa> • <InfoTappa> ::= <Nome > <Coordinate> dalle <Ora> alle <Ora> ( <Prezzo >)* ( <Descrizione >)* • <VisitaNegozi> ::= Visita negozi dalle <Ora> alle <Ora> • <Prezzo >::= <NUMERO> . <NUMERO> euro • <Coordinate> ::= <NUMERO> - <NUMERO> • Elenco TOKEN • <NUMERO: ([0-9])+> • <PAROLA: ([A-Z,a-z,0-9,_,\'])+> • <TAPPACUL: Museo: | Chiesa: > • <TAPPATUR: Monumento: | Punto • Panoramico: >

  5. Grammatica (2/5) SCOPO • <S> ::= inizio <Visita> fine • <Visita> ::= Partenza prevista in: <Nome> <Coordinate> alle <Ora> del giorno <Data > <Tipo> • <Tipo> ::= <Turistico> | <Culturale> | <Misto> • <Culturale> ::= Itinerario Culturale: ( <TappaCul> )+ • <Turistico> ::= Itinerario Turistico: ( <TappaTur>| <VisitaNegozi>)+ • <Misto> ::= Itinerario Misto: ( <Tappa> | <VisitaNegozi> )+ • <TappaTur> ::= ( <TAPPATUR> | Ristorante: ) <InfoTappa> • <TappaCul >::= ( <TAPPACUL> | Ristorante: ) <InfoTappa> • <Tappa> ::= ( <TAPPACUL> | <TAPPATUR> | Ristorante: ) <InfoTappa> • <VisitaNegozi> ::= Visita negozi dalle <Ora> alle <Ora> • <InfoTappa> ::= <Nome > <Coordinate> dalle <Ora> alle <Ora> ( <Prezzo >) * (<Descrizione>)*

  6. Grammatica (3/5) • <S> ::= inizio <Visita> fine • Ogni <Visita> prevede: • <Nome> , <Coordinate>, <Ora> e <Data> che rappresentano la partenza • <Tipo> è il tipo di itinerario • Esempio: • “ Partenza prevista in: Porta del Paese 280- 210 alle ore 12:12 del giorno 1/9/2009 Itinerario Misto: ” • <Visita> ::= Partenza prevista in: <Nome> <Coordinate> alle <Ora> del giorno • <Data> < Tipo> In questo caso le coordinate sono espresse in pixel, relativamente ad una cartina da me scelta

  7. Grammatica (4/5) • <S> ::= inizio <Visita> fine • <Visita> ::=Partenza prevista in: <Nome> <Coordinate> alle <Ora> del giorno <Data> • <Tipo> • <Tipo> ::= <Turistico> | <Culturale> | <Misto> • <Culturale> ::= Itinerario Culturale: ( <TappaCul> )+ • <Turistico> ::= Itinerario Turistico: ( <TappaTur >| <VisitaNegozi >)+ • <Misto> ::= Itinerario Misto: ( <Tappa> | <VisitaNegozi> )+ • <TappaTur> ::= ( <TAPPATUR> | Ristorante: ) <InfoTappa> • <TappaCul >::= ( <TAPPACUL> | Ristorante: ) <InfoTappa> • <Tappa> ::= ( <TAPPACUL> | <TAPPATUR> | Ristorante: ) <InfoTappa> • <VisitaNegozi> ::= Visita negozi dalle <Ora> alle <Ora> • <InfoTappa>::=<Nome > <Coordinate> dalle <Ora> alle <Ora> (<Prezzo >)* • ( <Descrizione >)*

  8. Grammatica (4/5) • <S> ::= inizio <Visita> fine • <Visita> ::=Partenza prevista in: <Nome> <Coordinate> alle <Ora> del giorno <Data> • <Tipo> • <Tipo> ::= <Turistico> | <Culturale> | <Misto> • <Culturale> ::= Itinerario Culturale: ( <TappaCul> )+ • <Turistico> ::= Itinerario Turistico: ( <TappaTur >| <VisitaNegozi >)+ • <Misto> ::= Itinerario Misto: ( <Tappa> | <VisitaNegozi> )+ • Sono previste 3 tipologie di itinerario: • Culturale: • Prevede una o più tappe culturali • Turistico: • Prevede una o più tappe turistiche oppure una o più visite libere per negozi • Misto: • Prevede qualsiasi tipo di tappa, unendo le possibilità offerte dagli altri due tipi di itinerario

  9. Grammatica (4/5) • <S> ::= inizio <Visita> fine • <Visita> ::= Partenza prevista in: <Nome> <Coordinate> alle <Ora> del giorno <Data > <Tipo> • <Tipo> ::= <Turistico> | <Culturale> | <Misto> • <Culturale> ::= Itinerario Culturale: ( <TappaCul> )+ • <Turistico> ::= Itinerario Turistico: ( <TappaTur>| <VisitaNegozi>)+ • <Misto> ::= Itinerario Misto: ( <Tappa> | <VisitaNegozi> )+ • <InfoTappa> ::= <Nome > <Coordinate> dalle <Ora> alle <Ora> ( <Prezzo >) * (<Descrizione>)* • <TappaTur> ::= ( <TAPPATUR> | Ristorante: ) <InfoTappa> • <TappaCul >::= ( <TAPPACUL> | Ristorante: ) <InfoTappa> • <Tappa> ::= ( <TAPPACUL> | <TAPPATUR> | Ristorante: ) <InfoTappa> • <VisitaNegozi> ::= Visita negozi dalle <Ora> alle <Ora>

  10. Grammatica (4/5) La generica tappa <Tappa> non contiene la visita ai negozi perché era stata inserita qui • Questa parte di grammatica esprime le attività che compongono un itinerario: • La parte lessicale prevede tra l’elenco di Token: • <TAPPACUL: Museo: | Chiesa:> • <TAPPATUR: Monumento: | Punto Panoramico:> • Quindi: • Visita di un museo <TAPPACUL> <InfoTappa> TAPPACUL= Museo: • Visita di una chiesa <TAPPACUL> <InfoTappa> TAPPACUL= Chiesa: • Visita a monumento <TAPPATUR> <InfoTappa> TAPPATUR=Monumento: • Visita pto panoramico <TAPPATUR> <InfoTappa> TAPPATUR=Punto • Visita libera per negoziVisita negozi dalle <Ora> alle <Ora> • Pranzo presso un ristoranteRistorante: <InfoTappa> • <Misto> ::= Itinerario Misto: ( <Tappa> | <VisitaNegozi> )+ • <TappaTur> ::= ( <TAPPATUR> | Ristorante: ) <InfoTappa> • <TappaCul >::= ( <TAPPACUL> | Ristorante: ) <InfoTappa> • <Tappa> ::= ( <TAPPACUL> | <TAPPATUR> | Ristorante: ) <InfoTappa> • <VisitaNegozi> ::= Visita negozi dalle <Ora> alle <Ora> Panoramico:

  11. Grammatica (5/6) • <S> ::= inizio <Visita> fine • <Visita> ::=Partenza prevista in: <Nome> <Coordinate> alle <Ora> del giorno <Data> • <Tipo> • <Tipo> ::= <Turistico> | <Culturale> | <Misto> • <Culturale> ::= Itinerario Culturale: ( <TappaCul> )+ • <Turistico> ::= Itinerario Turistico: ( <TappaTur >| <VisitaNegozi >)+ • <Misto> ::= Itinerario Misto: ( <Tappa> | <VisitaNegozi> )+ • <TappaTur> ::= ( <TAPPATUR> | Ristorante: ) <InfoTappa> • <TappaCul >::= ( <TAPPACUL> | Ristorante: ) <InfoTappa> • <Tappa> ::= ( <TAPPACUL> | <TAPPATUR> | Ristorante: ) <InfoTappa> • <VisitaNegozi> ::= Visita negozi dalle <Ora> alle <Ora> • <InfoTappa>::=<Nome > <Coordinate> dalle <Ora> alle <Ora> (<Prezzo >)* • ( <Descrizione >)*

  12. Grammatica (6/6) • <InfoTappa>::=<Nome > <Coordinate> dalle <Ora> alle <Ora> (<Prezzo >)* • ( <Descrizione >)* • Nome ::= ( <PAROLA> )+ • Descrizione ::= ( <PAROLA> )+ • Data ::= <NUMERO>/<NUMERO>/<NUMERO> • Ora ::= ore <NUMERO>:<NUMERO> • Prezzo ::= <NUMERO>.<NUMERO> euro • Coordinate ::= <NUMERO> "-" <NUMERO> • Esempi di parti frasi lecite: • Chiesa: Chiesa dei Cappuccini 400-220 dalle ore 12:12 alle ore 12:12 • Ristorante: Ristorante Il Loco 250-200 dalle ore 12:00 alle ore 14:00 19.90 euro menu fisso • Museo: Museo delle armi 100-100 dalle ore 12:00 alle ore 13:00 7.90 euro • Punto Panoramico: Stazione funivia 35-85 dalle ore 15:00 alle ore 15:15 • Visita negozi dalle 12:12 alle 14:00 • Elenco TOKEN • <NUMERO: ([0-9])+> • <PAROLA: ([A-Z,a-z,0-9,_,\'])+> • <TAPPACUL: Museo: | Chiesa: > • <TAPPATUR: Monumento: | Punto • Panoramico: > Nome Coordinate dalle Ora alle Ora Nome dalle Ora alle Ora Coordinate Prezzo Descrizione

  13. Esempio • inizio • Partenza prevista in: Porta del Paese 280- 210 alle ore 11:00 del giorno 1/9/2009 • Itinerario Misto: • Chiesa: Chiesa dei Cappuccini 400-220 dalle ore 11:30 alle ore 12:30 • Ristorante: Ristorante Il Loco 250-200 dalle ore 13:00 alle ore 14:30 19.90 euro menu fisso • Museo: Museo delle armi 100-100 dalle ore 14:45 alle ore 15:30 7.90 euro • Punto Panoramico: Stazione funivia 35-85 dalle ore 15:30 alle ore 16:00 • Chiesa: Chiesa San Francesco 300-180 dalle ore 16:15 alle ore 17:00 • Visita negozi dalle ore 17:00 alle ore 18:00 • fine

  14. Proprietà della Grammatica • La grammatica è di Tipo 2(context-free) secondo la classificazione di Chomsky, in quanto tutte le produzioni risultano essere nella forma: • Il linguaggio generato risulta essere di tipo Tipo 3 (regolare) poiché la grammatica non contiene self-embedding. A α con α (VT VN)*, A VN

  15. Riconoscitore • La grammatica è LL(1) • Utilizza al più 1 simbolo per riconoscere con certezza la produzione da scegliere • starter symbols disgiunti (non è necessario ricorrere ai directorsymbols poiché nessun metasimbolo genera la stringa vuota). • Quindi: • Le frasi vengono analizzate Left-to-Right applicando la leftmostderivation • l’analisi top-down è deterministica • il riconoscitore sarà deterministico

  16. Architettura del sistema • Il testo è acquisito tramite interfaccia grafica: • Digitando il testo • Caricando un file di testo Testo

  17. Architettura del sistema Analisi Lessicale: vengono individuate le singole parole (Token) di una frase Testo Sequenza di caratteri Lexer Sequenza di TOKEN

  18. Architettura del sistema Analisi Sintattica: si verifica che una frase sia costruita secondo le regole grammaticali che descrivono il linguaggio Testo Sequenza di caratteri Lexer AST Sequenza di TOKEN Parser Rappresentazione interna della frase

  19. Visitor • La classe DepthFirstVisitor (generata da JTB) è stata estesa da due sottoclassi: • TreeVisitor • visita l’APT e ne fornisce una rappresentazione grafica sotto forma di albero (la quale verrà passata all’interfaccia grafica). • LuoghiVisitor • visita l’APT e fornisce un elenco di tutte le tappe che costituiscono l’itinerario tranne le visite ai negozi (servirà per realizzare la visualizzazione dell’itinerario). • NegoziVisitor • visita l’APT e fornisce un elenco delle eventuali visite ai negozi (servirà per realizzare la visualizzazione dell’itinerario). • Ciascun visitor realizza una visita di tipo depth firstavvalendosi del meccanismo del doubledispatch

  20. Visitor TreeVisitor NegoziVisitor LuoghiVisitor

  21. Semantica (1/3) • Parte del controllo semantico è effettuato direttamente dal Parser, i controlli più complicati sono invece eseguiti dagli oggetti ControlloOrarieControlloMappa • I controlli effettuati direttamente dal Parsersono: • Controllo della data • Data ::= <NUMERO> "/" <NUMERO> "/" <NUMERO> • Controllo dell’ora • Ora ::= "ore" <NUMERO> ":" <NUMERO> • Considerando che il Token numero è: • <NUMERO: (["0"-"9"])+>

  22. Semantica (2/3) • I controlli effettuati dall’oggetto ControlloOrari(package Semantica) sono: • Orario di inizio visita di una Tappa minore o uguale a quello della fine ( tiVisitan≤ tfVisitan ) • Orario di fine visita della Tappa precedente minore o uguale all’orario di inizio visita della Tappa successiva (tfVisitan ≤ tiVisitan+1) • Esempio: • Chiesa: Chiesa dei Cappuccini 400-220 dalle ore 11:30 alle ore 12:30 • Ristorante: Ristorante Il Loco 250-200 dalle ore 13:00 alle ore 14:30 19.90 euro menu fisso 11:30<12:30 corretto!! 12:30<13:00 corretto!!

  23. Semantica (3/3) • ControlloMappa(package Semantica) • Problema:Dato un <Nome> di una tappa, <Coordinate> deve indicare il giusto punto sulla cartina (consistenza). • <InfoTappa>::=<Nome > <Coordinate> dalle <Ora> alle <Ora> (<Prezzo >)* • (<Descrizione >)* • Soluzione: • Prevedere una tabella che abbia come elementi (Nome, Coordinate) ed effettuare controllo: inutile inserire <Coordinate> in input, difficoltà se si vuole cambiare la cartina, in caso il luogo non si trovi in tabella si ha errore semantico anche se il luogo esiste • Lasciare il controllo semantico all’operatore che immette l’input: possibilità di inserire qualsiasi tappa, modalità della visualizzazione è provvisoria (sviluppi futuri: tecnologie di localizzazione google maps, GPS)

  24. Semantica (3/3) • ControlloMappa: Problema: • Dato un <Nome> di una tappa, <Coordinate> deve indicare il giusto punto sulla cartina (consistenza). • Scelta: Soluzione intermedia: • ControlloMappadispone di una HashMap<luogo,coordinate> contenente le indicazioni <luogo, coordinate> di gran parte delle tappe da poter visitare. Per ogni luogo: • Se <luogo,coordinate> è presente nell’elenco: vengono segnalati errori in caso di coordinate non corrette • Se <luogo,coordinate> non è presente nell’elenco: • il controllo semantico è lasciato all’operatore

  25. Strumenti utilizzati • Linguaggio: Java(jdk1.6.0_10) : • Ambiente di sviluppo: NetBeans IDE 6.5 • Generazione automatica parser: JavaCC 4.2 • Strumento per la generazione automatica delle classi necessarie a creare l’albero sintattico (AST) e per l’implementazione di Visitor che operano depth-first: Java Tree Builder 1.3.2 • Generazione della documentazione: JJDoc

  26. Classi generate da javacc Implementa il Lexer: contiene il metodo getNextToken() il quale implementa l’ASF deterministico che riconosce i token descritti dalle espressioni regolari Implementa il Parser: chiama il Lexer ogni volta che necessita del prossimo token. Contiene un metodo per ogni simbolo non terminale presente nella specifica della grammatica Ogni chiamata al metodo getNextToken() restituisce un oggetto di questa classe

  27. PAckage • View • Contiene le interfacce grafiche ed il manager dell’applicazione • Semantica • Contiene le classi usate nel controllo semantico • parserItinerario • Contiene le classi per lo scanning, il parsing e la costruzione dell’AST • syntaxTree • Contiene le classi necessarie per la costruzione dell’AST • visitor • Contiene i Visitor creati da JTB in automatico, TreeVisitor, LuoghiVisitor e NegoziVisitor

  28. Interfaccia grafica

  29. Interfaccia grafica

  30. Interfaccia grafica Cartina che mostra le Tappe dell’itinerario Informazioni relative alle Tappe dell’itinerario

  31. collaudo • Per il collaudo del sistema sono stati scritti alcuni significativi file di codice che verificassero: • Creazione corretta dell’albero utilizzando le 3 tipologie di itinerario: turistico, culturale e misto • Segnalazione di errori sintattici • Segnalazione di errori semantici da parte del parser(Ora, Data) • Segnalazione di errori semantici da parte delle classi nel package Semantica (orarioPrecedente<OrarioSuccessivo; <luogo,coordinate>) • Corretta visualizzazione dell’itinerario

  32. Sviluppi futuri • Rendere il riconoscitore capace di identificare un maggior numero di attività che compongono un itinerario • Prevedere un miglior sistema di localizzazione delle tappe • Automatizzare l’inserimento di una tappa dell’itinerario

  33. Demo • DEMO

More Related