Calendar Generator Progetto Linguaggi e Modelli Computazionali LS Docente: Enrico Dentidi: Alberto Renzi.

Slides:



Advertisements
Presentazioni simili
XmlBlackBox La presentazione Alexander Crea 11 Aprile 2010 La presentazione Alexander Crea 11 Aprile 2010.
Advertisements

Il Software.
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
I linguaggi di programmazione
Analizzatori Lessicali con JLex
Sintassi (prima parte)
Analizzatori Sintattici con Cup Giuseppe Morelli.
Parser Bottom UP Giuseppe Morelli. Parser Bottom UP Un parser Bottom Up lavora costruendo il corrispondente albero di parsing per una data stringa di.
Linguaggi di Programmazione e compilatori
XmlBlackBox La presentazione Alexander Crea 7 Giugno 2010 La presentazione Alexander Crea 7 Giugno 2010.
LE QUATTRO STAGIONI LA PRIMAVERA L’ESTATE L’INVERNO L’AUTUNNO.
Programmazione Procedurale in Linguaggio C++
Corso di Informatica (Programmazione)
Corso di Informatica A.A
Programmare Introduzione alla programmazione ovvero Che ci faccio in questaula?? Paolo Bernardi.
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
I SISTEMI OPERATIVI.
Meteo Service Corso di Reti di Calcolatori LS Casarini Stefano matr
Modulo 7 – reti informatiche u.d. 3 (syllabus – )
Progetto per lesame di Linguaggi e Modelli Computazionali LS Chiara Chiara Gualtieri.
ANTLR V.3 Renzi Alberto.
Ll Questionario Introduzione al software SAS (Parte 2) Metodi Quantitativi per Economia, Finanza e Management Esercitazione n°2.
Linguaggi e Modelli Computazionali M Prof. Enrico Denti
Università degli Studi di Bari Laurea in Chimica Di spense di Informatica - Dott. F. Mavelli Programmare in Matlab Funzioni di Libreria Funzioni definite.
Modulo 1 - Hardware u.d. 3 (syllabus – 1.3.5)
Progetto desame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti.
Linguaggi e Modelli Computazionali LS - Prof E.Denti
CineMan Linguaggio per la descrizione della programmazione di cinema
Corso di Laurea Specialistica in Ingegneria Informatica Itinerari aerei Progetto per lesame di Linguaggi e Modelli Computazionali LS realizzato da Stefano.
PROGRAMMARE IN C Un ambiente di sviluppo `e un software che serve per scrivere ed eseguire programmi. Generalmente integra almeno 3 funzionalita’: Editor:
S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari.
Linguaggio per la generazione di biglietti da visita
Gianfranco Zampolini Progetto per il corso di: Linguaggi e Modelli Computazionali LS EM Linguaggio per la Descrizione di un Evento Musicale.
Corso di Laurea Specialistica in Ingegneria Informatica Model Drive Applicazione per il pilotaggio di veicoli Esame di Linguaggi e Modelli computazionali.
Corso di Informatica A.A Corso di Informatica Laurea Triennale - Comunicazione&Dams Dott.ssa Maria Vittoria Avolio Laurea.
Linguaggi e modelli computazionali LS
Progetto di un linguaggio e interprete per giocare a MemoryPlus Progetto di:Docente: Vito La PortaEnrico Denti.
Un linguaggio ed un interprete per il gioco Citadels
Progetto don’t you forget
Progetto Fireworks Simulatore di spettacoli pirotecnici
Tablabla Progetto di Valent Cristina
SQL File Manager un nuovo modo di gestire il filesystem….
Università degli Studi di Bologna Facoltà di Ingegneria Anno Accademico 2007/2008 Laurea Specialistica in Ingegneria Informatica Linguaggi e Modelli Computazionali.
Chess Game Visualizer Un interprete per Short Algebraic Notation Progetto per lesame di Linguaggi e modelli computazionali LS prof. Denti – A.A. 2007/08.
Macro 1 Una macro è un elenco denominato di istruzioni. Ciascuna istruzione viene chiamata ‘azione’. Le azioni vengono eseguite in modo sequenziale e,
Linguaggi e modelli computazionali LS Manni Tiziano
ATTIVITÀ PROGETTUALE LINGUAGGI E MODELLI COMPUTAZIONALI L-M Un linguaggio per la descrizione di coreografie giocabili STUDENTE: BACCHILEGA SIMONE A.A 2013/2014.
1 Macro 1 Una macro è un elenco denominato di istruzioni. Ciascuna istruzione viene chiamata ‘azione’. Le azioni vengono eseguite in modo sequenziale e,
DAmb Sergio Lovrinich 28 Settembre Descrizione Questo Software si propone di eseguire una Analisi del Codice Sorgente, mettendo a disposizione Strumenti.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Il Calendario.
DRAUGHTS Linguaggi e Modelli Computazionali LS Linguaggio e interprete per effettuare una partita di dama inglese contro un’intelligenza artificiale Progetto.
Giannicola Spezzigu Accordo: sovrapposizione di 3 o più suoni Ogni sigla denota un accordo, ossia i suoni da cui esso è formato Accordi e.
Trading EToro Un linguaggio per descrivere e gestire operazioni di borsa Progetto di Linguaggi e Modelli Computazionali LS Prof. Enrico Denti Mancini Laura.
DerIntCalculator La calcolatrice per integrali e derivate Progetto di Linguaggi e Modelli Computazionali M Prof. Enrico Denti Realizzato da: Gabriella.
Linguaggi e Modelli Computazionali LS Anno Accademico 2007/2008 Alessio Della Motta Un linguaggio per descrivere partite di Maraffone: il gioco più popolare.
Programmazione Attività di progettazione ed implementazione di programmi I programmi permettono di realizzare funzioni complesse su un hardware in grado.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
Reti di calcolatori LS1 Service Middleware Reti di calcolatori LS progetto di Andrea Belardi Infrastruttura dedicata alla gestione di servizi disponibili.
CAKE Ambiente per la scrittura e la riproduzione audio di ricette per torte Linguaggi e Modelli Computazionali LSElisabetta Visciotti.
Eye Computer Sistema per l'interazione con un computer dotato di controllo oculare Linguaggi e modelli computazionali LS Realizzato da: Ciavarella Primiano.
Manuale Utente – i-Sisen Questionario dei Consumi
Manuale Utente – i-Sisen Questionario del Gas Naturale
Cloud Tecno V. Percorso didattico per l’apprendimento di Microsoft Access 4 - Le maschere.
NOTIFICHE  Notifich è una funzionalità interna al nostro sistema che permette di inviare brevi messaggi di notifiche agli utenti che porto.
Linguaggi e Grammatiche Alfabeto : insieme non vuoto di elementi detti simboli A = { a, b, c } Stringa : sequenza di simboli di un alfabeto ab abc abcab.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Gennaio 20.. LUNEDÌMARTEDÌMERCOLEDÌGIOVEDÌVENERDÌSABATODOMENICA.
CALENDARIO PIRELLI PER SOLE DONNE
1 – 70 1 – Aprile – Maggio – Giugno – Luglio 1985
Transcript della presentazione:

Calendar Generator Progetto Linguaggi e Modelli Computazionali LS Docente: Enrico Dentidi: Alberto Renzi

Obbiettivo del progetto Realizzare un interprete in grado di creare calendari personalizzati pronti per la stampa, utilizzando un linguaggio semplice e di facile utilizzo anche per utenti senza nozioni di programmazione. L’utente deve avere la possibilà di personalizzare: la grandezza del calendario, in termini di pixel; l’anno di riferimento; i mesi, con le relative immagini di background; la cartella di output da utilizzare; i promemoria testuali per festività, compleanni e appuntamenti.

Analisi del problema L’interprete dovrà quindi accettare una stringa di caratteri scritta dall’utente nell’interfaccia grafica; eseguirne l’analisi lessicale e sintattica producendo in output eventuali errori presenti nella frase passata; eseguire l’analisi semantica della frase producendo in output o un messaggio di errore con informazione sul tipo di errore commesso, oppure la generazione dei file del calendario nella cartella indicata.

Esempio di file.cal (1/2) PAGESETUP :{ WIDTH=2000; HEIGHT=3000; }; SETTINGS : { STARTMONTH: GENNAIO; ENDMONTH: DICEMBRE; YEAR=2010; OUTPUT=C:\Users\alberto\Desktop\out\; GENNAIO: { IMAGE = C:\Users\alberto\Desktop\mesi\gennaio.JPG; TYPE = HALF; }; FEBBRAIO: { IMAGE = C:\Users\alberto\Desktop\mesi\febbraio.JPG; TYPE = FULL; }; };

Esempio di file.cal (2/2) DAYS : {BIRTHDAY: { 25/MAGGIO-Alessandra; 15/OTTOBRE-Elisa; 13/SETTEMBRE-Franca; 31/GENNAIO-Antonio; }; HOLIDAY: { 1/GENNAIO-Capodanno; 6/GENNAIO-Epifania; 8/MARZO-Festa donna; 13/APRILE-Lunedì angelo; 12/APRILE-Pasqua; 25/APRILE-F.Libertà; 1/MAGGIO-F. lavoro; 2/GIUGNO-F. Repubblica; 15/AGOSTO-Ferragosto; 2/NOVEMBRE-Com.defunti; 25/DICEMBRE-Natale; 26/DICEMBRE-S. Stefano; 26/DICEMBRE-S. Silvestro; }; APPOINTMENT: { 1/DICEMBRE-Bollo Auto; };

Lexer: Token (1/2) COMMENT: '//'(~('\r'|'\n'))+ {skip();}; WS : ( ' ' | '\t' | '\r' | '\n' )+ {skip();} ; PAGESETUP :'PAGESETUP'; IMAGE:'IMAGE'; STARTMONTH :'STARTMONTH'; ENDMONTH:'ENDMONTH'; YEAR:'YEAR'; HALF:'HALF'; FULL:'FULL'; SETTINGS:'SETTINGS'; TYPE:'TYPE'; DAYS :'DAYS'; PARGL:'{'; PARGR:'}';

Lexer: Token (2/2) MONTH:('GENNAIO' | 'FEBBRAIO'| 'MARZO'| 'APRILE'| 'MAGGIO'| 'GIUGNO'| 'LUGLIO'| 'AGOSTO'| 'SETTEMBRE'| 'OTTOBRE'| 'NOVEMBRE'| 'DICEMBRE') ; HOLIDAY :'HOLIDAY:'; BIRTHDAY :'BIRTHDAY:'; APPOINTMENT:'APPOINTMENT:'; SETMONTH:'SETMONTH'; WIDTH:'WIDTH'; HEIGHT:'HEIGHT'; GIORNO : ‘1'..'9'|('1'|'2')'0'..'9'|'30'|'31'; QCIFRE:'1'..'9''0'..'9''0'..'9''0'..'9'; SLASH :'/'; SEMICOLON:';'; DUEP :':'; OUTPUT:'OUTPUT'; PATH : ('A'..'Z' | 'a'..'z')':' ('\\' ('a'..'z' | 'A'..'Z' | '0'..'9' | '.' | '_' | ' ')*)* ; TEXT_WITH_SPACES : '-'(~(';'|'\r'|'\n'))+;

Grammatica in EBNF ::= [ ] ::= pagesetup duep pargl pargr semicolon ::= width duep qcifre semicolon ::= height duep qcifre semicolon ::= settings duep pargl + pargr semicolon ::=startmonth duep month semicolon endmonth duep month semicolon ::= year duep qcifre semicolon ::= output duep path semicolon ::=month duep pargl image duep path semicolon [ ] pargr semicolon ::= days pargl ( | | )* pargr ::= birthday duep pargl ( text_with_spaces semicolon)* pargr semicolon ::= holiday duep pargl ( text_with_spaces semicolon)* pargr semicolon ::= appointment duep pargl ( text_with_spaces semicolon)* pargr semicolon ::= giorno slash month ::=type duep (half|full) semicolon

Tipo grammatica e linguaggio Tipo grammatica: è di tipo 2 in quanto non ha produzioni regolari e le produzioni sono tutte nella forma A  a con a є (VT U VN)*, A є VN LL(1): Nessuna produzione produce ε-rules e i simboli non terminali che compaiono alla sinistra di più produzioni alternative hanno starter symbol corrispondenti alle parti destre delle produzioni alternative disgiunti, quindi la grammatica è LL(1). Tipo linguaggio generato: la grammatica non presenta self- embedding e genera quindi un linguaggio tipo 3. E’ possibilie utilizzare l’analisi ricorsiva discendente (top-down)

Strumenti Linguaggio: java IDE: Netbeans ANTLR v.3: come strumento automatico per la generazione di lexer parser e treeparser. ImageJ: Librerie open source, sviluppate in java. Nel progetto sono state sfruttate le api per la creazione e la modifica di immagini. Data la possibilità di scrivere plugin in Java e’ stato possibile creare un plugin in grado di aprire l’interprete affinchè l’utente possa modificare direttamente le immagini prodotte per aggiungere ulteriori dettagli.

Antlr Strumento per la generazione di parser LL(k). Permette di generare separatamente lexer, parser e TreeParser (parser che riconosce un albero). Accetta grammatiche in EBNF e la generazione di alberi. Da inoltre la possibilità di aggiungere azioni semantiche direttamente nella grammatica. Mette a disposizione un debugger interno per visualizzare passo passo della derivazione di una frase di input e permette di visualizzare l’albero di derivazione e l’AST.

Architettura: interprete Il sistema è composto da quattro classi principali: CalendarLexer : crea i token per il parser; CalendarParser: responsabile del controllo sintattico e della costruzione dell’APT; CalendarTree (treeparser): a partire dall’APT (CommonTree) generato dal parser sono state associate azioni semantiche a ciascun nodo dell’albero in modo da “configurare” un oggetto thread di tipo “Engine”. Al termine della visita dell’albero viene eseguito un check sulla coerenza dei dati inseriti e se positivo fa partire il thread che genererà il calendario; Engine : Thread contenente tutte le strutture dati necessarie per la creazione del calendario, viene inizializzato da CalendarTree durante la visita dell’albero e viene fatto partire per produrre in output i file del calendario.

Architettura: interfaccie Sono state create due interfaccie grafiche per la creazione del calendario: CalendarEditor : permette di modificare manualmente il codice che verrà passato all’interprete. CalendarGUI : permette la creazione del calendario anche per i meno esperti. Nel caso l’interfaccia venisse richiamata dall’editor, l’inizializzazione è comunque affidata all’interprete, che in questo caso, non produrrà in output le immagini ma effettuerà solo il caricamento nell’interfaccia. Per eseguire questa operazione è necessario però che la frase passata superi analisi lessicale e sintattica.

Sintesi funzionamento CalendarEditor CalendarGUI CalendarLexer CalendarParser CalendarTree Engine CommonTokenStream CommonTreeNodeStream CommonTree Token Output phrase configura consistentCheck run

CalendarEditor

CalendarGUI...

Output generato...

Collaudo Sono state introdotti test Junit con la finalità di testare: Lexer Accettazione dei token previsti; Non accettazione di sequenze di caratteri errati, simulando errori di scrittura da parte dell’utente. Parser Riconoscimento di un token mancante o non previsto Giusta accettazione di una frase corretta. Treeparser Verifica del corretto caricamento dei dati nell’engine; Verifica del funzionamento del check di coerenza dei dati: Mese di partenza precedente al mese di arrivo; La specifica delle immagini di background per i mesi richiesti in output.

Ulteriori Features... Features di ANTLR disabilitate: ERROR RECOVERY: E’ il processo di recovery da un errore di sintassi che avviene alterando l’input stream o consumando simboli fino a che il parser può ripartire in uno stato conosciuto. Il parser infatti in corrispondenza di token mancanti o errati provvedeva all’autoinserimento o all’auto consumo di token per poi proccedere con la valutazione dei restanti token. Ridefinendo i metodi di gestione degli errori questa funzionalità, sebbene molto interessante, è stata disattivata al fine di verificare il corretto comportamento dell’interprete generato dalla grammatica. MECCANISMO DI NOTIFICA DI ERRORI: Al posto di redirigere solamente l’output nella casella di testo, è stato creato un meccanismo di notifica personalizzato al fine di indicare all’utente non solo la posizione dell’errore e il token errato o previsto, ma anche un esempio di codice accettato dando all’utente la possibilità di confrontarlo con il codice da lui scritto.

Sviluppi futuri Grammatica: Introduzione di regole grammaticali per permettere all’utente di personalizzare la grandezza, il colore e la posizione di ogni elemento del calendario. La possibilità inoltre di poter indicare più immagini come background del calendario e la posizione dell’immagine all’interno del foglio. Funzionalità dell’editor: Highlight del codice. Funzionalità della GUI: Generazione di un anteprima.