Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso...

16
Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico Denti

Transcript of Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso...

Page 1: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Sistema software per la programmazione di allarmi e promemoria

1Progetto DUF - Marco Albertin

Corso di Linguaggi e Modelli Computazionali

Prof. Enrico Denti

Page 2: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Obiettivi

Elaborare un linguaggio intuitivo per la scrittura di promemoria.

Realizzare un interprete estendibile che fornisca anche un semplice supporto per la gestione degli errori.

Progettare una semplice interfaccia grafica per la scrittura e gestione dei promemoria.

2Progetto DUF - Marco Albertin

Page 3: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Analisi del problema Scomposizione del programma in

moduli: Interprete. Interfaccia grafica. Componente di mediazione tra i due

ambiti. L’interprete necessita di una funzione

di valutazione (come valutare un promemoria?).

Necessità di salvare i promemoria su filesystem.

3Progetto DUF - Marco Albertin

Page 4: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Grammatica in BNF (1/4)

S ::= <COMMANDS> | ε La stringa vuota è teoricamente

accettata dal riconoscitore, ma non dal valutatore (semantica nulla).

Le frasi sono costituite da una serie di comandi (infinite frasi possibili).

L’ordine di comandi diversi tra loro è ininfluente.

Il linguaggio è case-sensitive.

Progetto DUF - Marco Albertin 4

Page 5: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Grammatica in BNF (2/4)<COMMANDS> ::= <COMMAND> , <COMMANDS> | <COMMAND>

<COMMAND> ::= when(<DATE>) | hour(<HOUR>) | minute(<SIXTIETHS>) | second(<SIXTIETHS>) | context(<TYPE>) | alertType(<ALERT>) | text(‘<TEXT>’) | repeat(<NUM>,<ARGUMENTLIST>)

<DATE> ::= <DAY>-<MONTH>-<YEAR>

| <DAY>/<MONTH>/<YEAR>

<TYPE> ::= generic | birthday | anniversary | call | meeting | party | diploma 

<ALERT> ::= none | discreet | average | maximum | red | lifeordeath

<ARGUMENTSLIST> ::= [<ARGUMENTS>] | []

<ARGUMENTS> ::= <ARGUMENT> , <ARGUMENTS> | <ARGUMENT>

<ARGUMENT> ::= yearDelay(<DIGIT>) | dayDelay(<DDAY>) | hourDelay(<DHOUR>) | minuteDelay(<DSIXTIETHS>) | increasing_priority | relaxing_priority | static_priority

5Progetto DUF - Marco Albertin

Comandi

principali

Formati di data

“Enumerativi”

Sottocomandi di repeat

Page 6: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Grammatica in BNF (3/4)<YEAR> ::= 198 <DIGIT> | 199 <DIGIT> | 20 <DIGIT> <DIGIT>

<MONTH> ::= <NOT_ZERO> | 10 | 11 | 12

<DAY> ::= <NOT_ZERO> | 1 <DIGIT> | 2 <DIGIT> | 30 | 31

<HOUR> ::= <DIGIT> | 1 <DIGIT> | 20 | 21 | 22 | 23

<SIXTIETHS> ::= <DIGIT> | <ONE_TO_FIVE> <DIGIT>

<DDAY> ::= <NOT_ZERO> | <NOT_ZERO> <DIGIT> | 1 <DIGIT> <DIGIT> | 2 <DIGIT> <DIGIT> | 3 <ZERO_TO_SIX> <ZERO_TO_FOUR>

<DHOUR> ::= <NOT_ZERO> | 1 <DIGIT> | 20 | 21 | 22 | 23

<DSIXTIETHS> ::= <NOT_ZERO> | <ONE_TO_FIVE> <DIGIT>

<NUM> ::= <NOT_ZERO> | <NOT_ZERO> <DIGIT>

<ONE_TO_FIVE> ::= 1 | 2 | 3 | 4 | 5

<ZERO_TO_SIX> ::= <ZERO_TO_FOUR> | 5 | 6

<ZERO_TO_FOUR> ::= 0 | 1 | 2 | 3 | 4

<NOT_ZERO> ::= <ONE_TO_FIVE> | 6 | 7 | 8 | 9

<DIGIT> ::= 0 | <NOT_ZERO>Progetto DUF - Marco Albertin 6

Da 1980 a 2099

Da 1 a 12 Da 1 a 31

Da 0 a 23Da 0 a 59

Da 1 a 364

Da 1 a 23

Da 1 a 59

Da 1 a 99

Page 7: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Grammatica in BNF (4/4)

<TEXT> ::= <CHAR> <TEXT> | ε

<CHAR> ::= a | … | z | A | … | Z | <DIGIT> | …

Progetto DUF - Marco Albertin 7

Tutti i caratteri sono ammessi eccetto

l’apostrofo singolo (serve a delimitare la

stringa)

Page 8: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Considerazioni

Il linguaggio è di tipo 3 secondo la classificazione di Chomsky.

Grammatica di tipo LL(1). Formalismo del riconoscitore: ASF.

Progetto DUF - Marco Albertin 8

Page 9: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Scelte progettuali Progettazione di un sistema ibrido. Scrittura dell’interprete tramite il

linguaggio Prolog: Non è necessario costruire uno scanner ad

hoc. Programmazione più veloce ed ottimizzata. Possibilità di introdurre non determinismo a

costo implementativo nullo. Realizzazione dell’interfaccia grafica in

C#.NET. Utilizzo di tuProlog come libreria di

interfacciamento. Possibilità di creare direttamente un oggetto

C# dalla valutazione del linguaggio.Progetto DUF - Marco Albertin 9

Page 10: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Scelte progettuali

Necessità: rendere possibile la creazione e la gestione di più configurazioni di promemoria (Agenda) persistenti.

Soluzione: utilizzare file scritti in XML per memorizzare questo tipo di collezioni. Costruzione di metodi che trasformano i

promemoria in XML e viceversa. Utilizzo di strumenti automatici forniti dal

linguaggio per la scrittura di file XML.

Progetto DUF - Marco Albertin 10

Page 11: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Funzionamento

12Progetto DUF - Marco Albertin

Interprete Prolog

Scrittura del programma

Valutazione del programma

Intermediario tuProlog

Preparazione goal

Recupero dell’oggetto promemoria

Visualizzazione / esecuzione promemoria

Ambiente .NET

Ambiente Prolog

Page 12: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Estensione dell’interprete

Il linguaggio Prolog ammette asserzioni dinamiche.

Realizzazione di un blocco per la scrittura di produzioni personalizzate: #assert … #endassert All’interno del blocco vige la grammatica

Prolog Riscrittura del programma in forma di

goal Prolog aggiungendo la lista per le asserzioni dinamiche.

13Progetto DUF - Marco Albertin

Page 13: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Gestione degli errori

Il programma Prolog in caso di fallimento nel riconoscimento o nella valutazione risponderebbe: no.

Introduzione della variabile Error nella testa di ogni clausola contenente una stringa di errore.

La stringa viene riempita nel punto in cui si verifica il fallimento -> è possibile sapere il punto del programma che ha causato errori.

Progetto DUF - Marco Albertin 14

Page 14: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Limiti

L’estensione dell’interprete presuppone la conoscenza del linguaggio Prolog e del funzionamento dell’interprete statico.

La creazione di oggetti C# tramite Prolog lega fortemente i due ambiti applicativi e ne riduce la flessibilità.

Forte presenza di strutture imperative all’interno del programma Prolog -> leggibilità scarsa.

15Progetto DUF - Marco Albertin

Page 15: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

Sviluppi futuri Creazione di uno schema XSD per la

validazione dei file di Agenda. Realizzazione di un file XSLT per

rendere i file di Agenda visualizzabili dal Web.

Svincolare la parte di valutazione del linguaggio dal programma Prolog impostandola dinamicamente dall’intermediario.

Creare un Web Service per la creazione di promemoria da remoto.

16Progetto DUF - Marco Albertin

Page 16: Sistema software per la programmazione di allarmi e promemoria 1 Progetto DUF - Marco Albertin Corso di Linguaggi e Modelli Computazionali Prof. Enrico.

…have a DUF!!Progetto DUF - Marco Albertin 17

And then…