linguaggio per la produzione di grafici pierpaolo giuliani matr. 290007 prof: enrico denti linguaggi...
TRANSCRIPT
![Page 1: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/1.jpg)
ProduChartProducer Chart
Linguaggio per la produzione di grafici
Pierpaolo GiulianiMatr. 290007
Prof: Enrico Denti
Linguaggi e modelli computazionali LS
![Page 2: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/2.jpg)
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
Obiettivo
![Page 3: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/3.jpg)
Grammatica - esempioGrafico{
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]
}
![Page 4: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/4.jpg)
Token della grammatica (1)
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
Parte lessicale
![Page 5: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/5.jpg)
Token della grammatica (1)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" >
Grafici ottenibili
![Page 6: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/6.jpg)
Token della grammatica (1)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" >
Caratteristiche del grafico
![Page 7: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/7.jpg)
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
![Page 8: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/8.jpg)
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
![Page 9: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/9.jpg)
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
![Page 10: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/10.jpg)
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
![Page 11: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/11.jpg)
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
permettono il settaggio di parametri generali relativi alla visualizzazione del grafico stesso
StringaComposta ::= <STRINGA> ( <STRINGA> )*
![Page 12: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/12.jpg)
Grammatica – Parametri generali
Sottotitolo ::= "[" StringaComposta "]" ","ProprietaCarattere ",“ <POSIZIONE>
ProprietaCarattere ::= <STILE> "," <NUM>
Descrizione del sottotitolo
Esempio:
sottotitolo{[DifferenceChart permette di realizzare grafici di Differenza],GRASSETTO,15,BASSO
};
<STILE: "GRASSETTO" |"CORSIVO“|"NORMALE" >
<POSIZIONE: "SINISTRA" |"DESTRA" |"ALTO" |"BASSO" >
![Page 13: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/13.jpg)
Grammatica – costruzione grafi co (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
![Page 14: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/14.jpg)
Grammatica – costruzione grafi co (2)
Grafici orientati
Grafici non orientati
ConOrient ::= ( Category | XY | StepLine | Histogram )
NoOrient ::= ( TimeSeries | Difference | Gantt )
Grafico = parametro
generale +
serie dati
Grafico = tipologia "," ( attributi generali serie ( serie dati)+ )+
GenSerie ::= <STRINGA> ",“ ( <COLORE> )?
Due categorie di grafici multival:
Stringa descrittiva serie Colore serie
![Page 15: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/15.jpg)
Grammatica – costruzione grafi co (2)
Modellazione dei Dati delle Serie:SerieCategVal ::= <STRINGA> "," <NUMVIRG>
SerieXY ::= <NUMVIRG> "," <NUMVIRG>
DataValore ::= Data "," <NUMVIRG>
GanttData ::= <STRINGA> "," Data "," Data
SerieStepData ::= DataValore "," Orario
HistogramData ::= <NUMVIRG> ";"
Data ::= <NUM> "-" <MESE> "-" <NUM>
Orario ::= <NUM> “:” <NUM>
[ Categoria1 , 3.24]
[1.13 , 700.2]
[ Ottenere_Approvazione, 9-APR-2010 ,10-APR-2010]
[ 2-MAG-2009 , 124.1]
[19-FEB-2010 , 8.0 , 16:0]
[4.6; 6.6; 3.0; 7.3;]
![Page 16: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/16.jpg)
Grammatica – costruzione grafi co (2)
Grafici orientati
Grafici non orientati
ConOrient ::= ( Category | XY | StepLine | Histogram )
NoOrient ::= ( TimeSeries | Difference | Gantt )
Category ::= <CATEGORYCHART> "," ( "{" GenSerie "," ( "[" SerieCategVal "]" )+ "}" )+
Raggruppa diverse tipologie di grafici: Barre
2D / 3D stacked
Area Classica Stacked
Line Population
![Page 17: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/17.jpg)
Grammatica – costruzione grafi co (2)
Grafici orientati
Grafici non orientati
ConOrient ::= ( Category | XY | StepLine | Histogram )
NoOrient ::= ( TimeSeries | Difference | Gantt )
XY ::= <XYCHART> "," ( "{" GenSerie "," ( "[" SerieXY "]" )+ "}" )+
Raggruppa 2 tipologie di grafici: Area XY Barre XY
![Page 18: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/18.jpg)
Grammatica – costruzione grafi co (2)
Grafici orientati
Grafici non orientati
ConOrient ::= ( Category | XY | StepLine | Histogram )
NoOrient ::= ( TimeSeries | Difference | Gantt )
StepLine ::= <STEP_LINE> "," ( "{" GenSerie "," ( "[" SerieStepData "]" )+ "}" "," "tratteggio:" <NUMVIRG> ","
"spessore:“ <NUMVIRG> )+
![Page 19: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/19.jpg)
Grammatica – costruzione grafi co (2)
Grafici orientati
Grafici non orientati
ConOrient ::= ( Category | XY | StepLine | Histogram )
NoOrient ::= ( TimeSeries | Difference | Gantt )
Histogram ::= <HISTOGRAM> "," ( "{" GenSerie ","
"[" ( HistogramData )+ "]" "," <NUM>
"}")+
![Page 20: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/20.jpg)
Grammatica – costruzione grafi co (2)
Grafici orientati
Grafici non orientati
ConOrient ::= ( Category | XY | StepLine | Histogram )
NoOrient ::= ( TimeSeries | Difference | Gantt )
TimeSeries ::= <TIME_SERIES> "," ( "{" GenSerie ","
( "[" DataValore "]" )+ "}" )+
![Page 21: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/21.jpg)
Grammatica – costruzione grafi co (2)
Grafici orientati
Grafici non orientati
ConOrient ::= ( Category | XY | StepLine | Histogram )
NoOrient ::= ( TimeSeries | Difference | Gantt )
Difference ::= <DIFFERENCE> "," DifferenceData
DifferenceData "MINORE" "{" <COLORE> "}" "," "MAGGIORE" "{" <COLORE> "}"
DifferenceData ::= "{" GenSerie "," ( "[" DataValore "]" )+
"}"
![Page 22: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/22.jpg)
Grammatica – costruzione grafi co (2)
Grafici orientati
Grafici non orientati
ConOrient ::= ( Category | XY | StepLine | Histogram )
NoOrient ::= ( TimeSeries | Difference | Gantt )
Gantt ::= <GANTT> "," ( "{" GenSerie ","
( "[" GanttData "]" )+ "}" )+
![Page 23: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/23.jpg)
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 α != є
![Page 24: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/24.jpg)
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)
![Page 25: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/25.jpg)
VisitorAST
ParserScannerSpecifica
Flusso d’esecuzione e Interpretazione
Specifica del grafico secondo grammatica
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
![Page 26: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/26.jpg)
Package dell’applicazione
ChartContiene le classi per la gestione generale del grafico e dei diversi dataset
ChartCreatorContiene tutte le classi per realizzare il grafico
DatasetContiene tutte le classi per gestire correttamente le diverse serie dati dei differenti grafici
ProduChart.guiContiene le interfacce grafiche ed il manager dell’applicazione
VisitorContiene i Visitor creati da JTB in automatico
ProduChartVisitorContiene i visitor realizzati che estendono la classe DepthFirstVisitor
syntaxTreeContiene le classi necessarie per la costruzione dell’AST
parserContiene le classi per lo scanning, il parsing
![Page 27: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/27.jpg)
Package dell’applicazione
![Page 28: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/28.jpg)
Diagramma delle classi – Dataset
DatasetContiene tutte le classi per gestire correttamente le diverse serie dati dei differenti grafici
![Page 29: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/29.jpg)
Diagramma delle classi –Creazione grafi ci
ChartCreatorContiene tutte le classi per realizzare il grafico
![Page 30: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/30.jpg)
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
![Page 31: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/31.jpg)
Diagramma delle classi – c lassi 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
![Page 32: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/32.jpg)
Diagramma delle classi – c lassi Visitor
Automaticamente generato da JTB
◦ 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:
◦ ProduChartTreeVisitor Percorre l’albero e
costruisce una struttura TreeNode
◦ ProduChartXmlVisitor Percorre l’albero e
costruisce un documento XML
Data ::= <NUM> "-" <MESE> "-" <NUM>
Orario ::= <NUM> “:” <NUM>
![Page 33: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/33.jpg)
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
![Page 34: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/34.jpg)
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
![Page 35: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/35.jpg)
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
![Page 36: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/36.jpg)
Demo
![Page 37: Linguaggio per la produzione di grafici Pierpaolo Giuliani Matr. 290007 Prof: Enrico Denti Linguaggi e modelli computazionali LS](https://reader038.vdocuments.net/reader038/viewer/2022103113/5542eb66497959361e8d227b/html5/thumbnails/37.jpg)