Progetto per lesame di Linguaggi e Modelli Computazionali LS Chiara Chiara Gualtieri
Sviluppo di un semplice linguaggio per la descrizione di un itinerario 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
Definizione di un linguaggio in grado di descrivere le attività previste per creare un itinerario. Realizzare uninterprete per tale linguaggio che: accetti in ingresso una stringa di caratteri esegua unanalisi 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 rappresentazione sotto forma di albero Realizzare uno strumento grafico che visualizzi le attività previste nellitinerario e le informazioni relative ad esse
::= inizio fine ::= Partenza prevista in: alle del giorno ::= ( )+ ::= / / ::= ore : ::= | | ::= Itinerario Culturale: ( )+ ::= Itinerario Turistico: ( | )+ ::= Itinerario Misto: ( | )+ ::= ( | Ristorante: ) ::= ( | | Ristorante: ) ::= dalle alle ( )* ( )* ::= Visita negozi dalle alle ::=. euro ::= - Elenco TOKEN <TAPPATUR: Monumento: | Punto Panoramico: >
::= inizio fine ::= Partenza prevista in: alle del giorno ::= | | ::= Itinerario Culturale: ( )+ ::= Itinerario Turistico: ( | )+ ::= Itinerario Misto: ( | )+ ::= ( | Ristorante: ) ::= ( | | Ristorante: ) ::= Visita negozi dalle alle ::= dalle alle ( ) * ( )* SCOPO
::= inizio fine Ogni prevede:,, e che rappresentano la partenza è il tipo di itinerario Esempio: Partenza prevista in: Porta del Paese alle ore 12:12 del giorno 1/9/2009 Itinerario Misto: In questo caso le coordinate sono espresse in pixel, relativamente ad una cartina da me scelta ::= Partenza prevista in: alle del giorno
::= inizio fine ::=Partenza prevista in: alle del giorno ::= | | ::= Itinerario Culturale: ( )+ ::= Itinerario Turistico: ( | )+ ::= Itinerario Misto: ( | )+ ::= ( | Ristorante: ) ::= ( | | Ristorante: ) ::= Visita negozi dalle alle ::= dalle alle ( )* ( )*
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 ::= inizio fine ::=Partenza prevista in: alle del giorno ::= | | ::= Itinerario Culturale: ( )+ ::= Itinerario Turistico: ( | )+ ::= Itinerario Misto: ( | )+
::= inizio fine ::= Partenza prevista in: alle del giorno ::= | | ::= Itinerario Culturale: ( )+ ::= Itinerario Turistico: ( | )+ ::= Itinerario Misto: ( | )+ ::= dalle alle ( ) * ( )* ::= ( | Ristorante: ) ::= ( | | Ristorante: ) ::= Visita negozi dalle alle
::= ( | Ristorante: ) ::= ( | | Ristorante: ) ::= Visita negozi dalle alle Questa parte di grammatica esprime le attività che compongono un itinerario: La parte lessicale prevede tra lelenco di Token: Quindi: Visita di un museo TAPPACUL = Museo: Visita di una chiesa TAPPACUL = Chiesa: Visita a monumento TAPPATUR = Monumento: Visita pto panoramico TAPPATUR =Punto Visita libera per negozi Visita negozi dalle alle Pranzo presso un ristorante Ristorante: Panoramico: ::= Itinerario Misto: ( | )+ La generica tappa non contiene la visita ai negozi perché era stata inserita qui
::= inizio fine ::=Partenza prevista in: alle del giorno ::= | | ::= Itinerario Culturale: ( )+ ::= Itinerario Turistico: ( | )+ ::= Itinerario Misto: ( | )+ ::= ( | Ristorante: ) ::= ( | | Ristorante: ) ::= Visita negozi dalle alle ::= dalle alle ( )* ( )*
<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 dalle ore 12:12 alle ore 12:12 Ristorante: Ristorante Il Loco dalle ore 12:00 alle ore 14: euro menu fisso Museo: Museo delle armi dalle ore 12:00 alle ore 13: euro Punto Panoramico: Stazione funivia dalle ore 15:00 alle ore 15:15 Visita negozi dalle 12:12 alle 14:00 NomeCoordinatedalle Ora alle Ora Nome Coordinate dalle Ora alle Ora PrezzoDescrizione Elenco TOKEN <TAPPATUR: Monumento: | Punto Panoramico: >
inizio Partenza prevista in: Porta del Paese alle ore 11:00 del giorno 1/9/2009 Itinerario Misto: Chiesa: Chiesa dei Cappuccini dalle ore 11:30 alle ore 12:30 Ristorante: Ristorante Il Loco dalle ore 13:00 alle ore 14: euro menu fisso Museo: Museo delle armi dalle ore 14:45 alle ore 15: euro Punto Panoramico: Stazione funivia dalle ore 15:30 alle ore 16:00 Chiesa: Chiesa San Francesco dalle ore 16:15 alle ore 17:00 Visita negozi dalle ore 17:00 alle ore 18:00 fine
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
La grammatica è LL(1) Utilizza al più 1 simbolo per riconoscere con certezza la produzione da scegliere starter symbols disgiunti (non è necessario ricorrere ai director symbols poiché nessun metasimbolo genera la stringa vuota). Quindi: Le frasi vengono analizzate Left-to-Right applicando la left most derivation lanalisi top-down è deterministica il riconoscitore sarà deterministico
Testo Il testo è acquisito tramite interfaccia grafica: Digitando il testo Caricando un file di testo
Testo Lexer Analisi Lessicale: vengono individuate le singole parole (Token) di una frase Sequenza di caratteri Sequenza di TOKEN
Testo Lexer Parser Analisi Sintattica: si verifica che una frase sia costruita secondo le regole grammaticali che descrivono il linguaggio Rappresentazione interna della frase AST Sequenza di caratteri Sequenza di TOKEN
La classe DepthFirstVisitor (generata da JTB) è stata estesa da due sottoclassi: TreeVisitor visita lAPT e ne fornisce una rappresentazione grafica sotto forma di albero (la quale verrà passata allinterfaccia grafica). LuoghiVisitor visita lAPT e fornisce un elenco di tutte le tappe che costituiscono litinerario tranne le visite ai negozi (servirà per realizzare la visualizzazione dellitinerario). NegoziVisitor visita lAPT e fornisce un elenco delle eventuali visite ai negozi (servirà per realizzare la visualizzazione dellitinerario). Ciascun visitor realizza una visita di tipo depth first avvalendosi del meccanismo del double dispatch
TreeVisitor LuoghiVisitor NegoziVisitor
Parte del controllo semantico è effettuato direttamente dal Parser, i controlli più complicati sono invece eseguiti dagli oggetti ControlloOrari e ControlloMappa I controlli effettuati direttamente dal Parser sono: Controllo della data Data ::= "/" "/" Controllo dellora Ora ::= "ore" ":" Considerando che il Token numero è:
I controlli effettuati dalloggetto ControlloOrari (package Semantica) sono: Orario di inizio visita di una Tappa minore o uguale a quello della fine ( t i Visita n t f Visita n ) Orario di fine visita della Tappa precedente minore o uguale allorario di inizio visita della Tappa successiva ( t f Visita n t i Visita n+1 ) Esempio: Chiesa: Chiesa dei Cappuccini dalle ore 11:30 alle ore 12:30 Ristorante: Ristorante Il Loco dalle ore 13:00 alle ore 14: euro menu fisso 11:30<12:30 corretto!! 12:30<13:00 corretto!!
ControlloMappa (package Semantica) Problema:Dato un di una tappa, deve indicare il giusto punto sulla cartina (consistenza). ::= dalle alle ( )* ( )* Soluzione: Prevedere una tabella che abbia come elementi (Nome, Coordinate) ed effettuare controllo : inutile inserire 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 alloperatore che immette linput: possibilità di inserire qualsiasi tappa, modalità della visualizzazione è provvisoria (sviluppi futuri: tecnologie di localizzazione google maps, GPS)
ControlloMappa: Problema: Dato un di una tappa, deve indicare il giusto punto sulla cartina (consistenza). Scelta: Soluzione intermedia: ControlloMappa dispone di una HashMap contenente le indicazioni di gran parte delle tappe da poter visitare. Per ogni luogo: Se è presente nellelenco: vengono segnalati errori in caso di coordinate non corrette Se non è presente nellelenco: il controllo semantico è lasciato alloperatore
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 lalbero sintattico (AST) e per limplementazione di Visitor che operano depth-first: Java Tree Builder Generazione della documentazione: JJDoc
Implementa il Lexer: contiene il metodo getNextToken() il quale implementa lASF 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
View Contiene le interfacce grafiche ed il manager dellapplicazione Semantica Contiene le classi usate nel controllo semantico parserItinerario Contiene le classi per lo scanning, il parsing e la costruzione dellAST syntaxTree Contiene le classi necessarie per la costruzione dellAST visitor Contiene i Visitor creati da JTB in automatico, TreeVisitor, LuoghiVisitor e NegoziVisitor
Cartina che mostra le Tappe dellitinerario Informazioni relative alle Tappe dellitinerario
Per il collaudo del sistema sono stati scritti alcuni significativi file di codice che verificassero: Creazione corretta dellalbero 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 ) Corretta visualizzazione dellitinerario
Rendere il riconoscitore capace di identificare un maggior numero di attività che compongono un itinerario Prevedere un miglior sistema di localizzazione delle tappe Automatizzare linserimento di una tappa dellitinerario
DEMO