SlideShare a Scribd company logo
1 of 28
Download to read offline
Schedule

Linguaggio per la
gestione di impegni ed
eventi

Daniele Campogiani - Linguaggi e Modelli Computazionali M - Anno Accademico 2012/2013
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
Grammatica : Token
SKIP : {

TOKEN : {

" "

<INTEGER: (<DIGIT>)+>

| "r"

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

| "t"

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

| "n"

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

}

| <TIMEZONE: (<CHAR>)+ "/" (<CHAR>)*>
| <STRING: """ <STRINGANY> """>
| <STRINGANY: (<CHAR> | <DIGIT> | "_" | ".")+>
| <MAIL: """ <STRINGANY> "@" <STRINGANY> "."
<STRINGANY> """>
}
Grammatica : Produzioni
●

Scope ::= Declarations Body

●

Declarations ::= TimeZoneDeclaration ( VariableDeclaration )*

●

TimeZoneDeclaration ::= "timeZone" "=" <TIMEZONE>

●

VariableDeclaration

●

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 )

::= ( PersonDeclaration | LocationDeclaration )
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
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"

}
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"

}
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”
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)
Architettura

Scanner

Analisi Lessicale

AST

Parser

Analisi Sintattica
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
Architettura Sistema : Visitor
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)
Architettura Sistema : Visitor
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
ScheduleWebVisitor: Output
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:20131102T084057Z-uidGen@macbook-pro-di-daniele.local
ATTENDEE;ROLE=REQ-PARTICIPANT;CN=balducci.jessica@gmail.com:balducci.jessica@gmail.com
LOCATION:Frassinago
END:VEVENT
BEGIN:VEVENT
DTSTAMP:20131102T084058Z
DTSTART:20131105T000000
DTEND:20131105T235900
SUMMARY:esame
TZID:Europe/Rome
UID:20131102T084059Z-uidGen@macbook-pro-di-daniele.local
ATTENDEE;ROLE=REQ-PARTICIPANT;CN=ahri@hotmail.it:ahri@hotmail.it
END:VEVENT
END:VCALENDAR
ScheduleIcsVisitor: Output con
Client
ScheduleASTVisitor: Output
ScheduleMailVisitor
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 )
Interfaccia Grafca
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
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)
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
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
Source Code

http://github.com/dcampogiani/schedule
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

More Related Content

Similar to Schedule - Progetto di Linguaggi e Modelli Computazionali M

Studio e sviluppo di un’interfaccia per applicazione WEB 2.0
Studio e sviluppo di un’interfaccia per applicazione WEB 2.0Studio e sviluppo di un’interfaccia per applicazione WEB 2.0
Studio e sviluppo di un’interfaccia per applicazione WEB 2.0NobelMusic
 
Progettato per specialisti del web
Progettato per specialisti del webProgettato per specialisti del web
Progettato per specialisti del webEugenio Uccheddu
 
Webcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineWebcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineDavide Benvegnù
 
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...Codemotion
 
Come utilizzare il bot framework
Come utilizzare il bot frameworkCome utilizzare il bot framework
Come utilizzare il bot frameworkAlessio Iafrate
 
Laboratorio internet 6: Piano di qualità
Laboratorio internet 6: Piano di qualitàLaboratorio internet 6: Piano di qualità
Laboratorio internet 6: Piano di qualitàRoberto Polillo
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsIgor Antonacci
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Final presentation of Project Management course (Gestione Progetti Software) ...
Final presentation of Project Management course (Gestione Progetti Software) ...Final presentation of Project Management course (Gestione Progetti Software) ...
Final presentation of Project Management course (Gestione Progetti Software) ...Alexander Minichino
 
PyPaPi Qt Java Framework
PyPaPi Qt Java FrameworkPyPaPi Qt Java Framework
PyPaPi Qt Java FrameworkTiziano Lattisi
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 

Similar to Schedule - Progetto di Linguaggi e Modelli Computazionali M (20)

Il browser
Il browserIl browser
Il browser
 
8 - Il browser
8 - Il browser8 - Il browser
8 - Il browser
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
 
Studio e sviluppo di un’interfaccia per applicazione WEB 2.0
Studio e sviluppo di un’interfaccia per applicazione WEB 2.0Studio e sviluppo di un’interfaccia per applicazione WEB 2.0
Studio e sviluppo di un’interfaccia per applicazione WEB 2.0
 
Progettato per specialisti del web
Progettato per specialisti del webProgettato per specialisti del web
Progettato per specialisti del web
 
Webcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineWebcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio Online
 
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
 
Come utilizzare il bot framework
Come utilizzare il bot frameworkCome utilizzare il bot framework
Come utilizzare il bot framework
 
Java&Solidarieta
Java&SolidarietaJava&Solidarieta
Java&Solidarieta
 
Laboratorio internet 6: Piano di qualità
Laboratorio internet 6: Piano di qualitàLaboratorio internet 6: Piano di qualità
Laboratorio internet 6: Piano di qualità
 
Html5
Html5Html5
Html5
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
Final presentation of Project Management course (Gestione Progetti Software) ...
Final presentation of Project Management course (Gestione Progetti Software) ...Final presentation of Project Management course (Gestione Progetti Software) ...
Final presentation of Project Management course (Gestione Progetti Software) ...
 
PyPaPi Qt Java Framework
PyPaPi Qt Java FrameworkPyPaPi Qt Java Framework
PyPaPi Qt Java Framework
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 

Recently uploaded

Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticanico07fusco
 
IL CHIAMATO ALLA CONVERSIONE, credo che Dio verrà a giudicare vivi e morti
IL CHIAMATO ALLA CONVERSIONE, credo che Dio verrà a giudicare vivi e mortiIL CHIAMATO ALLA CONVERSIONE, credo che Dio verrà a giudicare vivi e morti
IL CHIAMATO ALLA CONVERSIONE, credo che Dio verrà a giudicare vivi e mortiRafael Figueredo
 
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptxTeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptxteccarellilorenzo
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereMarco Chizzali
 
Questa è una presentazione di Scienze riguardo le varietà allotropiche del ca...
Questa è una presentazione di Scienze riguardo le varietà allotropiche del ca...Questa è una presentazione di Scienze riguardo le varietà allotropiche del ca...
Questa è una presentazione di Scienze riguardo le varietà allotropiche del ca...nicolofusco13
 
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxPancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxpalestiniaurora
 
magia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxmagia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxpalestiniaurora
 
Educazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointEducazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointpalestiniaurora
 
presentazione di Storia di michela .pptx
presentazione di Storia di michela .pptxpresentazione di Storia di michela .pptx
presentazione di Storia di michela .pptxmichelacaporale12345
 
Cap16_Sandro_Botticellipresentazione.pptx
Cap16_Sandro_Botticellipresentazione.pptxCap16_Sandro_Botticellipresentazione.pptx
Cap16_Sandro_Botticellipresentazione.pptxpalestiniaurora
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxteccarellilorenzo
 
presentazione di arte di michela caporale.pptx
presentazione di arte di michela caporale.pptxpresentazione di arte di michela caporale.pptx
presentazione di arte di michela caporale.pptxmichelacaporale12345
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...Nguyen Thanh Tu Collection
 
ed civica ambiente presentazione (1).pptx
ed civica ambiente presentazione (1).pptxed civica ambiente presentazione (1).pptx
ed civica ambiente presentazione (1).pptxmichelacaporale12345
 
Pancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxPancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxpalestiniaurora
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxteccarellilorenzo
 
presentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxpresentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxmichelacaporale12345
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfteccarellilorenzo
 
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxPalestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxpalestiniaurora
 
TeccarelliLorenzo-testoargomentativo.docx
TeccarelliLorenzo-testoargomentativo.docxTeccarelliLorenzo-testoargomentativo.docx
TeccarelliLorenzo-testoargomentativo.docxteccarellilorenzo
 

Recently uploaded (20)

Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
IL CHIAMATO ALLA CONVERSIONE, credo che Dio verrà a giudicare vivi e morti
IL CHIAMATO ALLA CONVERSIONE, credo che Dio verrà a giudicare vivi e mortiIL CHIAMATO ALLA CONVERSIONE, credo che Dio verrà a giudicare vivi e morti
IL CHIAMATO ALLA CONVERSIONE, credo che Dio verrà a giudicare vivi e morti
 
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptxTeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Questa è una presentazione di Scienze riguardo le varietà allotropiche del ca...
Questa è una presentazione di Scienze riguardo le varietà allotropiche del ca...Questa è una presentazione di Scienze riguardo le varietà allotropiche del ca...
Questa è una presentazione di Scienze riguardo le varietà allotropiche del ca...
 
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxPancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
 
magia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxmagia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptx
 
Educazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointEducazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpoint
 
presentazione di Storia di michela .pptx
presentazione di Storia di michela .pptxpresentazione di Storia di michela .pptx
presentazione di Storia di michela .pptx
 
Cap16_Sandro_Botticellipresentazione.pptx
Cap16_Sandro_Botticellipresentazione.pptxCap16_Sandro_Botticellipresentazione.pptx
Cap16_Sandro_Botticellipresentazione.pptx
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docx
 
presentazione di arte di michela caporale.pptx
presentazione di arte di michela caporale.pptxpresentazione di arte di michela caporale.pptx
presentazione di arte di michela caporale.pptx
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
ed civica ambiente presentazione (1).pptx
ed civica ambiente presentazione (1).pptxed civica ambiente presentazione (1).pptx
ed civica ambiente presentazione (1).pptx
 
Pancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxPancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docx
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
presentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxpresentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptx
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxPalestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
 
TeccarelliLorenzo-testoargomentativo.docx
TeccarelliLorenzo-testoargomentativo.docxTeccarelliLorenzo-testoargomentativo.docx
TeccarelliLorenzo-testoargomentativo.docx
 

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
  • 3. Grammatica : Token SKIP : { TOKEN : { " " <INTEGER: (<DIGIT>)+> | "r" | <DIGIT: ["0"-"9"]> | "t" | <CHAR: ["A"-"Z"] | ["a"-"z"]> | "n" | <ID: <CHAR> (<CHAR> | <DIGIT>)*> } | <TIMEZONE: (<CHAR>)+ "/" (<CHAR>)*> | <STRING: """ <STRINGANY> """> | <STRINGANY: (<CHAR> | <DIGIT> | "_" | ".")+> | <MAIL: """ <STRINGANY> "@" <STRINGANY> "." <STRINGANY> """> }
  • 4. Grammatica : Produzioni ● Scope ::= Declarations Body ● Declarations ::= TimeZoneDeclaration ( VariableDeclaration )* ● TimeZoneDeclaration ::= "timeZone" "=" <TIMEZONE> ● VariableDeclaration ● 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 ) ::= ( PersonDeclaration | LocationDeclaration )
  • 5. 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
  • 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
  • 17. 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:20131102T084057Z-uidGen@macbook-pro-di-daniele.local ATTENDEE;ROLE=REQ-PARTICIPANT;CN=balducci.jessica@gmail.com:balducci.jessica@gmail.com LOCATION:Frassinago END:VEVENT BEGIN:VEVENT DTSTAMP:20131102T084058Z DTSTART:20131105T000000 DTEND:20131105T235900 SUMMARY:esame TZID:Europe/Rome UID:20131102T084059Z-uidGen@macbook-pro-di-daniele.local ATTENDEE;ROLE=REQ-PARTICIPANT;CN=ahri@hotmail.it:ahri@hotmail.it END:VEVENT END:VCALENDAR
  • 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