1 / 16

Progetto d on’t yo u f orget

Corso di Linguaggi e Modelli Computazionali Prof. Enrico Denti. Sistema software per la programmazione di allarmi e promemoria. Progetto d on’t yo u f orget. Obiettivi. Elaborare un linguaggio intuitivo per la scrittura di promemoria.

doria
Download Presentation

Progetto d on’t yo u f orget

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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. Progetto DUF - Marco Albertin

  3. 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. Progetto DUF - Marco Albertin

  4. 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

  5. Comandi principali 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 Formati di data “Enumerativi” Sottocomandi di repeat Progetto DUF - Marco Albertin

  6. Grammatica in BNF (3/4) Da 1980 a 2099 Da 1 a 12 Da 1 a 31 <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> Da 0 a 23 Da 0 a 59 Da 1 a 364 Da 1 a 23 Da 1 a 59 Da 1 a 99 Progetto DUF - Marco Albertin

  7. Grammatica in BNF (4/4) <TEXT> ::= <CHAR> <TEXT> | ε <CHAR> ::= a | … | z | A | … | Z | <DIGIT> | … Tutti i caratteri sono ammessi eccetto l’apostrofo singolo (serve a delimitare la stringa) Progetto DUF - Marco Albertin

  8. Considerazioni • Il linguaggio è di tipo 3 secondo la classificazione di Chomsky. • Grammatica di tipo LL(1). • Formalismo del riconoscitore: ASF. Progetto DUF - Marco Albertin

  9. 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

  10. 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

  11. Funzionamento Ambiente .NET Interprete Prolog Intermediario tuProlog Interfaccia grafica Scrittura del programma Preparazione goal Valutazione del programma Recupero dell’oggetto promemoria Visualizzazione / esecuzione promemoria Ambiente Prolog Progetto DUF - Marco Albertin

  12. 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. Progetto DUF - Marco Albertin

  13. 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. 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. Progetto DUF - Marco Albertin

  15. 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. Progetto DUF - Marco Albertin

  16. And then… …have a DUF!! Progetto DUF - Marco Albertin

More Related