Linguaggi e modelli computazionali LS

Slides:



Advertisements
Presentazioni simili
Introduzione al DTD Mario Arrigoni Neri.
Advertisements

Introduzione ad XML Mario Arrigoni Neri.
Estendere i linguaggi: i tipi di dato astratti
I linguaggi di programmazione
Analizzatori Lessicali con JLex
Sintassi (prima parte)
Analizzatori Sintattici con Cup Giuseppe Morelli.
Traduttore diretto dalla sintassi (seconda parte)
Parser Bottom UP Giuseppe Morelli. Parser Bottom UP Un parser Bottom Up lavora costruendo il corrispondente albero di parsing per una data stringa di.
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
1 Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone
Anno accademico Il preprocessore del linguaggio C.
Fondamenti di Informatica I a.a Il linguaggio C Il preprocessore La sostituzione di macro Le compilazioni condizionali Linclusione di file C.
Cercare informazioni sul Web. 5-2 Organizzazione dellinformazione tramite gerarchie Classificazione gerarchica Linformazione è raggruppata in un piccolo.
Unità Didattica 2 I Linguaggi di Programmazione
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
LINGUAGGI DI PROGRAMMAZIONE
1 IsaPress. 2 Obiettivo Realizzare uno strumento di facile uso per estrarre il contenuto da documenti binari di vario tipo in un formato utile per l'impaginazione.
1 IsaPress. 2 Obiettivo Realizzare uno strumento di facile uso per estrarre il contenuto da documenti binari di vario tipo in un formato utile per l'impaginazione.
Corso Informatica di Base Menu del disegno
ARGONEXT Accesso Docente
Progetto per lesame di Linguaggi e Modelli Computazionali LS Chiara Chiara Gualtieri.
A D IET – P ROGETTO PER L ESAME DI L INGUAGGI E M ODELLI C OMPUTAZIONALI LS Prof. Enrico Denti Sviluppato da Fabio Bracci – AA 2009/2010.
ANTLR V.3 Renzi Alberto.
Linguaggi e Modelli Computazionali M Prof. Enrico Denti
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
SISTEMA OPERATIVO..
Facoltà di Ingegneria – Università di Bologna
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:
LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.
S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari.
Linguaggio per la generazione di biglietti da visita
Linguaggi e Modelli Computazionali a.a. 2009/2010
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.
Progetto di un linguaggio e interprete per giocare a MemoryPlus Progetto di:Docente: Vito La PortaEnrico Denti.
Presentazione del problema Obiettivo: Lapplicazione di Search of Sematic Services permette di ricercare sevizi semantici, ossia servizi a cui sono associati.
runhome Progetto di Linguaggi e Modelli Computazionali LS Luca Bueti
Corso di Laurea Specialistica in Ingegneria Informatica Previsione dei Consumi Elettrici = Progetto per lesame di Linguaggi e Modelli Computazionali LS.
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.
Linguaggi e modelli computazionali LS Manni Tiziano
Interrogare il database
ATTIVITÀ PROGETTUALE LINGUAGGI E MODELLI COMPUTAZIONALI L-M Un linguaggio per la descrizione di coreografie giocabili STUDENTE: BACCHILEGA SIMONE A.A 2013/2014.
Modulo 6 Test di verifica
LABVIEW Sommario Che cosa è uno strumento virtuale (VI) creato con LABVIEW Parti di un VI: pannello frontale diagramma a blocchi Confronto tra il principio.
1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML Esercizi.
Microsoft Word Interfaccia grafica
IV D Mercurio DB Lezione 2
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.
Calendar Generator Progetto Linguaggi e Modelli Computazionali LS Docente: Enrico Dentidi: Alberto Renzi.
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.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
CAKE Ambiente per la scrittura e la riproduzione audio di ricette per torte Linguaggi e Modelli Computazionali LSElisabetta Visciotti.
Automi temporizzati.
Eye Computer Sistema per l'interazione con un computer dotato di controllo oculare Linguaggi e modelli computazionali LS Realizzato da: Ciavarella Primiano.
Informatica e Informatica di Base
Cloud Tecno V. Percorso didattico per l’apprendimento di Microsoft Access 4 - Le maschere.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Transcript della presentazione:

Linguaggi e modelli computazionali LS ProduChart Producer Chart Linguaggio per la produzione di grafici Linguaggi e modelli computazionali LS Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti

Obiettivo Realizzazione di un semplice linguaggio per produrre grafici Occorre: Progettare un linguaggio che sia in grado di esprimere le caratteristiche di un particolare grafico. Realizzare un tool che supporti tale linguaggio: accetti in ingresso una descrizione del grafico nel linguaggio realizzato; esegua un’analisi sintattica al fine di riconoscere se lo schema è scritto in modo lecito per il linguaggio; esegua le azioni corrispondenti alla semantica dello schema immesso. Realizzare uno strumento grafico che: visualizzi il risultato finale del grafico prodotto

Grammatica - esempio Grafico { tipo grafico{'Categoria','Valore',VERT, NORMAL_AREA, }; nome finestra{grafico}; titolo grafico{'grafico Area'}; sottotitolo{[Il grafico area permette di rappre- sentare serie di dati….],CORSIVO,15,ALTO}; sfondo finestra{BIANCO}; sfondo grafico{GRIGIOCHIARO}; } { Prima,GIALLO, [ Categoria1,1.0] [ Categoria2,4.0] [ Categoria3,3.0] [ Categoria4,5.0] [ Categoria5,5.0] } { Seconda,VERDE, [ Categoria1,5.0] [ Categoria2,7.0] [ Categoria3,6.0] [ Categoria4,8.0] [ Categoria5,4.0] } { Terza,ROSSO, [ Categoria1,4.0] [ Categoria2,3.0] [ Categoria3,2.0] [ Categoria4,3.0] [ Categoria5,6.0] }

Token della grammatica (1) Parte lessicale TOKEN : { <CATEGORYCHART: "NORMAL_AREA" | "AREA_STACKED" | "BAR_STACKED" | "DUALDIM_BAR" | "TRIDIM_BAR" | "LINE“ | "POPULATION_BAR" > | <XYCHART: "INTERVAL_XY_BAR" | "COLLECTION_XY_AREA" > | <PIE: "PIE"> | <STEP_LINE: "STEP_LINE"> | <DIFFERENCE: "DIFFERENCE"> | <TIME_SERIES: "TIME_SERIES"> | <GANTT:"GANTT"> | <HISTOGRAM:"HISTOGRAM"> | <DIM: "2D" | "3D”> | <ORIENTAZIONE: "ORIZZ" | "VERT" > | <COLORE: "NERO" | "ROSSO" | "BLU" | "CIANO" | "BIANCO" | "GRIGIOCHIARO" |"GRIGIO” | "GRIGIOSCURO" | "ROSA" | "VERDE" | "MAGENTA" |"ARANCIONE" | "GIALLO" > Tipologie di grafico

Token della grammatica (1) { <CATEGORYCHART: "NORMAL_AREA" | "AREA_STACKED" | "BAR_STACKED" | "DUALDIM_BAR" | "TRIDIM_BAR" | "LINE“ | "POPULATION_BAR" > | <XYCHART: "INTERVAL_XY_BAR" | "COLLECTION_XY_AREA" > | <PIE: "PIE"> | <STEP_LINE: "STEP_LINE"> | <DIFFERENCE: "DIFFERENCE"> | <TIME_SERIES: "TIME_SERIES"> | <GANTT:"GANTT"> | <HISTOGRAM:"HISTOGRAM"> | <DIM: "2D" | "3D”> | <ORIENTAZIONE: "ORIZZ" | "VERT" > | <COLORE: "NERO" | "ROSSO" | "BLU" | "CIANO" | "BIANCO" | "GRIGIOCHIARO" |"GRIGIO” | "GRIGIOSCURO" | "ROSA" | "VERDE" | "MAGENTA" |"ARANCIONE" | "GIALLO" > Grafici ottenibili

Token della grammatica (1) { <CATEGORYCHART: "NORMAL_AREA" | "AREA_STACKED" | "BAR_STACKED" | "DUALDIM_BAR" | "TRIDIM_BAR" | "LINE“ | "POPULATION_BAR" > | <XYCHART: "INTERVAL_XY_BAR" | "COLLECTION_XY_AREA" > | <PIE: "PIE"> | <STEP_LINE: "STEP_LINE"> | <DIFFERENCE: "DIFFERENCE"> | <TIME_SERIES: "TIME_SERIES"> | <GANTT:"GANTT"> | <HISTOGRAM:"HISTOGRAM"> | <DIM: "2D" | "3D”> | <ORIENTAZIONE: "ORIZZ" | "VERT" > | <COLORE: "NERO" | "ROSSO" | "BLU" | "CIANO" | "BIANCO" | "GRIGIOCHIARO" |"GRIGIO” | "GRIGIOSCURO" | "ROSA" | "VERDE" | "MAGENTA" |"ARANCIONE" | "GIALLO" > Caratteristiche del grafico

Token della grammatica (2) | <STILE: "GRASSETTO" | "CORSIVO" | "NORMALE" > | <POSIZIONE: "SINISTRA" | "DESTRA" | "ALTO" | "BASSO" > | <MESE: "GEN" | "FEB" | "MAR" | "APR" | "MAG" | "GIU" | "LUG" | "AGO" | "SET" | "OTT" | "NOV" | "DIC" > | <CIFRA: ["0"-"9"]> | <NUM: ["1"-"9"] (<CIFRA>)* | "0"> | <NUMVIRG: ("+" | "-")? <NUM> "." (<CIFRA>)*> | <CARATTERE: ["a"-"z", "A"-"Z" ] | <CARATVARI> | <CIFRA> > | <CARATVARI: ["_", "\'", "!", "$“ ]> | <STRINGA: (<CARATTERE>)+ > Associare caratteristiche alla descrizione del grafico

Token della grammatica (2) | <STILE: "GRASSETTO" | "CORSIVO" | "NORMALE" > | <POSIZIONE: "SINISTRA" | "DESTRA" | "ALTO" | "BASSO" > | <MESE: "GEN" | "FEB" | "MAR" | "APR" | "MAG" | "GIU" | "LUG" | "AGO" | "SET" | "OTT" | "NOV" | "DIC“ > | <CIFRA: ["0"-"9"]> | <NUM: ["1"-"9"] (<CIFRA>)* | "0"> | <NUMVIRG: ("+" | "-")? <NUM> "." (<CIFRA>)*> | <CARATTERE: ["a"-"z", "A"-"Z" ] | <CARATVARI> | <CIFRA> > | <CARATVARI: ["_", "\'", "!", "$“ ]> | <STRINGA: (<CARATTERE>)+ > Caratteristiche temporali

Token della grammatica (2) | <STILE: "GRASSETTO" | "CORSIVO" | "NORMALE" > | <POSIZIONE: "SINISTRA" | "DESTRA" | "ALTO" | "BASSO" > | <MESE: "GEN" | "FEB" | "MAR" | "APR" | "MAG" | "GIU" | "LUG" | "AGO" | "SET" | "OTT" | "NOV" | "DIC" > | <CIFRA: ["0"-"9"]> | <NUM: ["1"-"9"] (<CIFRA>)* | "0"> | <NUMVIRG: ("+" | "-")? <NUM> "." (<CIFRA>)*> | <CARATTERE: ["a"-"z", "A"-"Z" ] | <CARATVARI> | <CIFRA> > | <CARATVARI: ["_", "\'", "!", "$“ ]> | <STRINGA: (<CARATTERE>)+ > Valori presenti nel grafico

Token della grammatica (2) | <STILE: "GRASSETTO" | "CORSIVO" | "NORMALE" > | <POSIZIONE: "SINISTRA" | "DESTRA" | "ALTO" | "BASSO" > | <MESE: "GEN" | "FEB" | "MAR" | "APR" | "MAG" | "GIU" | "LUG" | "AGO" | "SET" | "OTT" | "NOV" | "DIC" > | <CIFRA: ["0"-"9"]> | <NUM: ["1"-"9"] (<CIFRA>)* | "0"> | <NUMVIRG: ("+" | "-")? <NUM> "." (<CIFRA>)*> | <CARATTERE: ["a"-"z", "A"-"Z" ] | <CARATVARI> | <CIFRA> > | <CARATVARI: ["_", "\'", "!", "$“ ]> | <STRINGA: (<CARATTERE>)+ > Rappresentazione stringhe presenti nel grafico

Grammatica - Scope Il simbolo iniziale Scope della grammatica Scope ::= "Grafico" "{" "tipo grafico" "{" Tipo "}" ";" "nome finestra" "{" ( StringaComposta )? "}" ";" "titolo grafico" "{" ( StringaComposta )? "}" ";" "sottotitolo" "{" ( Sottotitolo )? "}" ";" "sfondo finestra" "{" ( <COLORE> )? "}" ";" "sfondo grafico“ "{" ( <COLORE> )? "}" ";" "}" <EOF> Lo Scope della grammatica richiede: tipo grafico descrizione del grafico da realizzare nome finestra titolo grafico sottotitolo sfondo finestra sfondo grafico Produzioni: regole di riscrittura StringaComposta ::= <STRINGA> ( <STRINGA> )* permettono il settaggio di parametri generali relativi alla visualizzazione del grafico stesso

Grammatica – Parametri generali Descrizione del sottotitolo Sottotitolo ::= "[" StringaComposta "]" "," ProprietaCarattere ",“ <POSIZIONE> ProprietaCarattere ::= <STILE> "," <NUM> Esempio: sottotitolo{ [DifferenceChart permette di realizzare grafici di Differenza], GRASSETTO, 15, BASSO }; <STILE: "GRASSETTO" |"CORSIVO“ |"NORMALE" > <POSIZIONE: "SINISTRA" |"DESTRA" |"ALTO" |"BASSO" >

Grammatica – costruzione grafico (1) Tipo – costruzione del grafico Classificazione Grafici: SingleVal: serie che compongono il grafico a singolo valore MultiVal: serie che compongono il grafico a più valori, suddivisi in: Orientati Non orientati Tipo ::= ( SingleVal | MultiVal ) SingleVal ::= <PIE> ",“ <DIM> "," <NUM> "," ( "[" SerieCategVal "]" <COLORE> )+ MultiVal ::= NomeAssi "," ( ( <ORIENTAZIONE> "," ConOrient | NoOrient ) ) NomeAssi ::= StringaComposta "," StringaComposta

Grammatica – costruzione grafico (2) Due categorie di grafici multival: Grafico = parametro generale + serie dati Grafici orientati ConOrient ::= ( Category | XY | StepLine | Histogram ) Grafico = tipologia "," ( attributi generali serie ( serie dati)+ )+ Grafici non orientati NoOrient ::= ( TimeSeries | Difference | Gantt ) GenSerie ::= <STRINGA> ",“ ( <COLORE> )? Stringa descrittiva serie Colore serie

Grammatica – costruzione grafico (2) Modellazione dei Dati delle Serie: SerieCategVal ::= <STRINGA> "," <NUMVIRG> [ Categoria1 , 3.24] SerieXY ::= <NUMVIRG> "," <NUMVIRG> [1.13 , 700.2] [ Ottenere_Approvazione, 9-APR-2010 ,10-APR-2010] GanttData ::= <STRINGA> "," Data "," Data DataValore ::= Data "," <NUMVIRG> [ 2-MAG-2009 , 124.1] [19-FEB-2010 , 8.0 , 16:0] SerieStepData ::= DataValore "," Orario [4.6; 6.6; 3.0; 7.3;] HistogramData ::= <NUMVIRG> ";" Data ::= <NUM> "-" <MESE> "-" <NUM> Orario ::= <NUM> “:” <NUM>

Grammatica – costruzione grafico (2) Category ::= <CATEGORYCHART> "," ( "{" GenSerie "," ( "[" SerieCategVal "]" )+ "}" )+ Grafici orientati Raggruppa diverse tipologie di grafici: Barre 2D / 3D stacked Area Classica Stacked Line Population ConOrient ::= ( Category | XY | StepLine | Histogram ) Grafici non orientati NoOrient ::= ( TimeSeries | Difference | Gantt )

Grammatica – costruzione grafico (2) XY ::= <XYCHART> "," ( "{" GenSerie "," ( "[" SerieXY "]" )+ "}" )+ Grafici orientati Raggruppa 2 tipologie di grafici: Area XY Barre XY ConOrient ::= ( Category | XY | StepLine | Histogram ) Grafici non orientati NoOrient ::= ( TimeSeries | Difference | Gantt )

Grammatica – costruzione grafico (2) StepLine ::= <STEP_LINE> "," ( "{" GenSerie "," ( "[" SerieStepData "]" )+ "}" "," "tratteggio:" <NUMVIRG> "," "spessore:“ <NUMVIRG> )+ Grafici orientati ConOrient ::= ( Category | XY | StepLine | Histogram ) Grafici non orientati NoOrient ::= ( TimeSeries | Difference | Gantt )

Grammatica – costruzione grafico (2) Histogram ::= <HISTOGRAM> "," ( "{" GenSerie "," "[" ( HistogramData )+ "]" "," <NUM> "}")+ Grafici orientati ConOrient ::= ( Category | XY | StepLine | Histogram ) Grafici non orientati NoOrient ::= ( TimeSeries | Difference | Gantt )

Grammatica – costruzione grafico (2) TimeSeries ::= <TIME_SERIES> "," ( "{" GenSerie "," ( "[" DataValore "]" )+ "}" )+ Grafici orientati ConOrient ::= ( Category | XY | StepLine | Histogram ) Grafici non orientati NoOrient ::= ( TimeSeries | Difference | Gantt )

Grammatica – costruzione grafico (2) Difference ::= <DIFFERENCE> "," DifferenceData DifferenceData "MINORE" "{" <COLORE> "}" "," "MAGGIORE" "{" <COLORE> "}" Grafici orientati ConOrient ::= ( Category | XY | StepLine | Histogram ) DifferenceData ::= "{" GenSerie "," ( "[" DataValore "]" )+ "}" Grafici non orientati NoOrient ::= ( TimeSeries | Difference | Gantt )

Grammatica – costruzione grafico (2) Gantt ::= <GANTT> "," ( "{" GenSerie "," ( "[" GanttData "]" )+ "}" )+ Grafici orientati ConOrient ::= ( Category | XY | StepLine | Histogram ) Grafici non orientati NoOrient ::= ( TimeSeries | Difference | Gantt )

Proprietà della grammatica La grammatica è di Tipo 2 (context-free) secondo la classificazione di Chomsky, in quanto tutte le produzioni risultano essere nella forma Il linguaggio generato dalla grammatica risulta essere di Tipo 3 (regolare) in quanto la grammatica non contiene self-embedding, ovvero non prevede simboli non terminali autoinclusivi del tipo: A → β A δ dove A є VN e δ,β є V+ A α con α (VT VN)*, A VN Non c’è vincolo α != є

Osservazioni sulla grammatica La grammatica è LL(1): Ogni metasimbolo a sinistra di più produzioni ha starter simbols delle parti destre di produzioni alternative disgiunti (NECESSARIA) il riconoscitore utilizza al più un simbolo per riconoscere con certezza la produzione da scegliere Nessun metasimbolo genera stringa vuota (SUFFICIENTE)

Flusso d’esecuzione e Interpretazione Analisi lessicale (Lexer o Scanner) Data una sequenza di caratteri restituisce i token che compaiono Analisi sintattica-semantica (Parser) Data una sequenza token  verifica attinenza alle regole grammaticali Produce l’ AST Visitor Percorre l’albero APT mediante la tecnica del double dispatch Specifica del grafico secondo grammatica Scanner Parser Specifica AST Visitor

Package dell’applicazione Chart Contiene le classi per la gestione generale del grafico e dei diversi dataset ChartCreator Contiene tutte le classi per realizzare il grafico Dataset Contiene tutte le classi per gestire correttamente le diverse serie dati dei differenti grafici ProduChart.gui Contiene le interfacce grafiche ed il manager dell’applicazione Visitor Contiene i Visitor creati da JTB in automatico ProduChartVisitor Contiene i visitor realizzati che estendono la classe DepthFirstVisitor syntaxTree Contiene le classi necessarie per la costruzione dell’AST parser Contiene le classi per lo scanning, il parsing

Package dell’applicazione

Diagramma delle classi – Dataset Contiene tutte le classi per gestire correttamente le diverse serie dati dei differenti grafici

Diagramma delle classi –Creazione grafici ChartCreator Contiene tutte le classi per realizzare il grafico

Diagramma delle classi –classi JavaCC Lexer: - contiene il metodo getNextToken - riconosce i token descritti dalle espressioni regolari Parser: chiama il lexer ogni volta che necessita del prossimo token. Contiene un metodo per ogni simbolo non terminale presente nella specifica della grammatica Ogni chiamata al metodo getNextToken() restituisce un oggetto di questa classe

Diagramma delle classi – classi Visitor Automaticamente generato da JTB Pattern visitor: Ciascun visitor realizza una visita di tipo depth-first avvalendosi del meccanismo double dispatch. I visitor hanno un metodo visit per ogni classe rappresentante un nodo dell’ APT. Le classi visitate accetteranno la visita richiamando il metodo visit con argomento “this”. Esempio di classe della tassonomia

Diagramma delle classi – classi Visitor Automaticamente generato da JTB ProduChartXmlVisitor Percorre l’albero e costruisce un documento XML ProduChartTreeVisitor Percorre l’albero e costruisce una struttura TreeNode ProduChartVisitor Percorre l’albero ed istanzia tutti gli oggetti neces- sari per produrre il grafico Effettua gli opportuni controlli semantici Correttezza delle date: Correttezza degli orari: Data ::= <NUM> "-" <MESE> "-" <NUM> Orario ::= <NUM> “:” <NUM>

Funzionalità aggiuntive Ulteriori funzionalità: Salvataggio del programma in XML “ Più si struttura l’informazione, meno fatica si fa ad elaborarla “ Salvataggio del grafico prodotto in PDF Esportare il grafico come immagine

Limiti e sviluppi futuri Oltre al salvataggio, prevedere la lettura dei dati delle serie da XML Ampliare il numero dei grafici supportati Ampliare le funzionalità esprimibili dall’utente mediante il linguaggio Console per la scelta del colore Stili del grafico (tratteggio,ecc.) WIZARD per una definizione più semplice del file del grafico nel linguaggio realizzato Inserimento di più grafici contemporaneamente Per confronto Per modellare diversi aspetti afferenti a grafici diversi

Strumenti utilizzati Linguaggio: Java (jdk1.6.0_10) Ambiente di sviluppo: NetBeans IDE 6.8 Generazione automatica parser: JavaCC 5.0 Strumento per la generazione automatica delle classi necessarie a creare l’albero sintattico (AST) e per l’implementazione di Visitor che operano depth-first: Java Tree Builder 1.3.2 Strumento di produzione grafici: JFreeChart

Demo