Schedule - Progetto di Linguaggi e Modelli Computazionali M
1. Schedule
Linguaggio per la
gestione di impegni ed
eventi
Daniele Campogiani - Linguaggi e Modelli Computazionali M - Anno Accademico 2012/2013
2. Obiettivi
●
●
●
Progettare un sistema che permetta la definizione e la creazione di
impegni/eventi
Sviluppare un linguaggio per la descrizione delle informazioni caratterizzanti
ogni evento
Realizzare un interprete per tale linguaggio che dato in ingresso una stringa ne
esegua l'analisi sintattica-semantica
●
Sviluppare un “IDE” per supportare l'utente nella scrittura di codice
●
Rappresentazione in realtime delle frasi del linguaggio attraverso un albero
●
Generazione di un file .ics RFC 5545 per gli impegni
●
●
Generazione di una pagina web (html e css) per la visualizzazione/pubblicazione
degli impegni
Invio di mail di notifica (con allegato ics) ai partecipanti di un evento
6. Esempio base
TimeZone = Europe/Rome
on 05-11-2013 : {
from 15:50 to 16:20 do "Esame" wit
"matteo.poggi6@studio.unibo.it" at "ufficio"
}
7. Esempio Avanzato
timeZone = Europe/Rome
person jessica = "balducci.jessica@gmail.com"
location casa = "frassinago"
on 06-11-2013 : {
from 17:00 to 19:00 do "Palestra" with jessica,"altra@mail.com"
at "Mithos" repeating every 7 days until 06-06-2014
}
{
allDay do "Something" at casa
}
on 15-12-2013 : {
from 16:00 to 20:00 do "Regali" at "Mediaworld"
}
8. Sistema dei Tipi
●
●
●
●
Per facilitare la scrittura di codice è data la possibilità
all'utente di utilizzare variabili tipate
Una variabile può essere di tipo person o di tipo location
Nello specifico una variabile di tipo location è nella
forma “casa”, ossia stringa racchiusa tra doppi apici
Una variabile di tipo person è una stringa (tra doppi apici)
nella quale è obbligatoriamente presente il simbolo @ e
un dominio, ad esempio
“daniele.campogiani@gmail.com”
9. Tipologia Grammatica e
Linguaggio
●
La grammatica è di tipo 2, context-free, secondo la classificazione di Chomsky
–
Le regole di produzione sono tutte del tipo
A→α
●
con
ed
A є VN
Il linguaggio generato è di tipo 3, regolare poiché la grammatica non contiene
self-embedding
–
La grammatica non contiene alcun simbolo non terminale tale che
A →* α1Aα2
●
α є (VTUVN)*
con
α1,α2 єV+
ed
AєVN
La grammatica è di tipo LL(1)
–
–
–
Ogni produzione con più alternative nella parte destra ha gli insiemi degli Starter Symbols
disgiunti (Condizione Necessaria)
Nessuna Produzione genera la stringa vuota ε (Condizione Sufficiente)
Le frasi sono analizzabili left-to-right con left-most derivation utilizzando al più un
simbolo per scegliere con certezza la produzione da applicare (Analisi Top-Down)
11. Packages
●
parser : classi relative allo scanner ed al parser generate da
JavaCC
●
syntaxtree : classi per la costruzione dell'AST generate da JTB
●
visitor : classi dei visitor generate da JTB
●
visitor.myvisitors : specifiche implementazioni di IVoidVisitor
●
view : interfacce e classi per UI
●
controller : interfacce e classi per la gestione dell'interazione
con utente
13. Architettura Sistema : Visitor
●
●
●
●
IVoidVisitor : interfaccia generata da JavaCC
ScheduleAbstractBasicVisitor : classe astratta che realizza
alcune visit (NodeChoice, NodeList, NodeListOptional,
NodeOptional, NodeSequence, NodeTCF, NodeToken) e
realizza setter/getter per attributi
ScheduleSemanticCheckVisitor: per il controllo semantico
ScheduleAbstractAdvancedVisitor: classe astratta che si
occupa di realizzare setter/getter per attributi che verranno
utilizzati dalle classi concrete che la estenderanno (vedi oltre)
15. Architettura Sistema : Visitor
●
●
●
●
ScheduleWebVisitor: per la realizzazione di pagina
html e relativo css
ScheduleIcsVisitor: per la generazione di un file ics
contenente tutti gli eventi presenti nel file sorgente
ScheduleASTVisitor: per la creazione dell'albero da
visualizzare all'utente
ScheduleMailVisitor: per l'invio di notifiche ai
partecipanti allegando un file ics per il singolo evento
al quale sono invitati
21. Interfaccia Grafca
●
●
●
●
●
E' stato realizzato un “IDE” che facilita la scrittura di codice
evidenziando le keywords del linguaggio
L'utente può lavorare contemporaneamente su un numero illimitato
di file
E' presente un'area di console nella quale viene riportato l'esito della
valutazione e gli eventuali errori riscontrati, fornendo consigli
all'utente su cosa ci si sarebbe aspettato in caso di fallimento
E' presente una visualizzazione ad albero del codice inserito
La valutazione avviene istantaneamente, alla modifica del codice
per fornire subito un feedback all'utente ( come in Eclipse )
23. Interfaccia Grafca
●
●
●
E' stato realizzato un componente
DCEditorTextPane estendeJTextPaneil quale
che
data una lista di keywords provvede ad evidenziarle
appena inserite
Viene poi utilizzata un'istanza di questo componente
per ogni file aperto/creato dall'utente
L'utente può selezionare su quale file lavorare grazi
ad un JTabbedPane
24. Controllo Semantico
●
Gli errori semantici gestiti dal ScheduleSemanticCheckVisitor riguardano:
–
–
–
–
–
–
–
–
–
Esistenza del TimeZone specificato
Controllo di variabili già precedentemente definite
Esistenza delle date utilizzate
Data di fine di un evento successiva al relativo inizio (per eventi che si ripetono)
Validità degli orari inserite
Orario di terminazione di un evento successivo al relativo inizio
Utilizzo di variabili definite
Controllo dei tipi (non si può utilizzare una variabile di tipo place tra i
partecipanti e viceversa)
Validità di intervallo di ripetizione di un evento (non può essere nullo o negativo)
25. Collaudo
●
Il sistema è stato collaudato attraverso opportune frasi di input per
verificare:
–
–
–
–
–
–
●
Segnalazione di errori sintattici
Segnalazione di errori semantici
Corretta generazione dell'albero
Corretta generazione del file .ics
Corretta generazione della pagina html+css
Corretto invio di email con allegati
Inoltre l'utente viene guidato nella scrittura di codice attraverso
l'output che appare sulla console durante la digitazione
26. Strumenti Utilizzati
●
Linguaggio di programmazione: Java jdk1.6.0_65
●
Ambiente di sviluppo: Eclipse Kepler
●
Interfaccia grafica: WindowsBuilder Pro plugin Eclipse
●
Generazione della grammatica: JavaCC 5.0
●
Generazione automatica delle classi per creare AST: JTB
●
Generazione della documentazione: JJDoc
●
Generazione file ics: iCal4j
●
Invio mail : javaMail
●
Controllo di versione : git
28. Sviluppi Futuri
●
Aggiunta di estensioni che aumentano l'espressività:
–
–
●
●
Possibilità di specificare il ruolo di ogni partecipante (partecipante
opzionale o necessario)
Possibilità di specificare coordinate geografiche del luogo dell'incontro
Utilizzo del protocollo CalDav (RFC 4791) per la
gestione/condivisione di calendari attraverso url, permettendone
l'utilizzo con software come Google Calendar
Permetterne l'uso “al contrario”:
–
Dare la possibilità di aprire un file .ics ed ottenere codice sorgente
“Schedule” per poter apportare le modifiche desiderate