Schedule - Progetto di Linguaggi e Modelli Computazionali M

28
Schedule Daniele Campogiani - Linguaggi e Modelli Computazionali M - Anno Accademico 2012/2013 Linguaggio per la gestione di impegni ed eventi

description

More info : https://github.com/dcampogiani/schedule Schedule è un linguaggio di programmazione per eventi.

Transcript of Schedule - Progetto di Linguaggi e Modelli Computazionali M

Page 1: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Schedule

Daniele Campogiani - Linguaggi e Modelli Computazionali M - Anno Accademico 2012/2013

Linguaggio per la gestione di impegni ed eventi

Page 2: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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

Page 3: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Grammatica : Token

SKIP : {

" "

| "\r"

| "\t"

| "\n"

}

TOKEN : {

<INTEGER: (<DIGIT>)+>

| <DIGIT: ["0"-"9"]>

| <CHAR: ["A"-"Z"] | ["a"-"z"]>

| <ID: <CHAR> (<CHAR> | <DIGIT>)*>

| <TIMEZONE: (<CHAR>)+ "/" (<CHAR>)*>

| <STRING: "\"" <STRINGANY> "\"">

| <STRINGANY: (<CHAR> | <DIGIT> | "_" | ".")+>

| <MAIL: "\"" <STRINGANY> "@" <STRINGANY> "." <STRINGANY> "\"">

}

Page 4: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Grammatica : Produzioni

● Scope ::= Declarations Body● Declarations ::= TimeZoneDeclaration ( VariableDeclaration )*● TimeZoneDeclaration ::= "timeZone" "=" <TIMEZONE>● VariableDeclaration ::= ( PersonDeclaration | LocationDeclaration )● PersonDeclaration ::= "person" <ID> "=" <MAIL>● LocationDeclaration ::= "location" <ID> "=" <STRING>● Body ::= ( Day )+● Day ::= "on" DayDate ":" ( Event )+● Event ::= "{" Duration Doing ( Partecipants )? ( Location )? ( Repeating )? "}"● DayDate ::= <INTEGER> "-" <INTEGER> "-" <INTEGER>● Duration ::= ( AllDayDuration | FromToDuration )

Page 5: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Grammatica : Produzioni

● AllDayDuration ::= "allDay"● FromToDuration ::= "from" TimeEvent "to" TimeEvent● TimeEvent ::= <INTEGER> ":" <INTEGER>● Doing ::= "do" <STRING>● Partecipants ::= "with" Partecipant ( OthersPartecipants )*● OthersPartecipants ::= "," Partecipant● Partecipant ::= ( <ID> | <MAIL> )● Location ::= "at" Place● Place ::= ( <ID> | <STRING> )● Repeating ::= "repeating" RepeatingTime RepeatingStop● RepeatingTime ::= "every" <INTEGER> "days"● RepeatingStop ::= "untill" DayDate

Page 6: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Esempio base

TimeZone = Europe/Rome

on 05-11-2013 : {

f r o m 1 5 : 5 0 t o 1 6 : 2 0 d o " E s a m e " w i t h "[email protected]" at "ufficio"

}

Page 7: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Esempio Avanzato

timeZone = Europe/Rome

person jessica = "[email protected]"

location casa = "frassinago"

on 06-11-2013 : {

from 17:00 to 19:00 do "Palestra" with jessica,"[email protected]"

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"

}

Page 8: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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 “[email protected]

Page 9: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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 α є (VTUVN)* 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 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)

Page 10: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Architettura

ScannerScannerAnalisi Lessicale

ParserParserAnalisi SintatticaASTAST

Page 11: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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

Page 12: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Architettura Sistema : Visitor

Page 13: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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)

Page 14: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Architettura Sistema : Visitor

Page 15: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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

Page 16: Schedule - Progetto di Linguaggi e Modelli Computazionali M

ScheduleWebVisitor: Output

Page 17: Schedule - Progetto di Linguaggi e Modelli Computazionali M

ScheduleIcsVisitor: Output

BEGIN:VCALENDAR

PRODID:-//Daniele Campogiani//schedule 1.0//EN

VERSION:2.0

CALSCALE:GREGORIAN

BEGIN:VEVENT

DTSTAMP:20131102T084057Z

DTSTART:20131101T193000

DTEND:20131101T213000

SUMMARY:lavatrice

TZID:Europe/Rome

UID:[email protected]

ATTENDEE;ROLE=REQ-PARTICIPANT;[email protected]:[email protected]

LOCATION:Frassinago

END:VEVENT

BEGIN:VEVENT

DTSTAMP:20131102T084058Z

DTSTART:20131105T000000

DTEND:20131105T235900

SUMMARY:esame

TZID:Europe/Rome

UID:[email protected]

ATTENDEE;ROLE=REQ-PARTICIPANT;[email protected]:[email protected]

END:VEVENT

END:VCALENDAR

Page 18: Schedule - Progetto di Linguaggi e Modelli Computazionali M

ScheduleIcsVisitor: Output con Client

Page 19: Schedule - Progetto di Linguaggi e Modelli Computazionali M

ScheduleASTVisitor: Output

Page 20: Schedule - Progetto di Linguaggi e Modelli Computazionali M

ScheduleMailVisitor

Page 21: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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 )

Page 22: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Interfaccia Grafca

Page 23: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Interfaccia Grafca

● E' stato realizzato un componente DCEditorTextPane che estende JTextPane il quale 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 grazie ad un JTabbedPane

Page 24: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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)

Page 25: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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

Page 26: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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

Page 27: Schedule - Progetto di Linguaggi e Modelli Computazionali M

Source Code

http://github.com /dcampogiani/schedule

Page 28: Schedule - Progetto di Linguaggi e Modelli Computazionali M

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