+ Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli...

22
+ Checkout Linguaggio per la gestione di una cassa Progetto per l’esame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010

Transcript of + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli...

Page 1: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+

CheckoutLinguaggio per la gestione di una cassa

Progetto per l’esame di

Linguaggi e Modelli Computazionali LS

Fabio Ferretti

Anno Accademico: 2009-2010

Page 2: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Obiettivi del progetto

Creare un linguaggio per gestire le operazioni della cassa di un negozio Inserimento di prodotti per la vendita Dettagli dei prodotti disponibili Vendita al cliente

Creare un interprete che controlli le frasi inserite dall’utente

Simulare i meccanismi di una normale cassa

Gestire la persistenza dei dati e fornirne una rappresentazione tabellare

Page 3: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+

Cerca tra i prodotti presenti una specifica categoriaRimozione dal sistema di una categoria di prodottiOperazione che elimina dal sistema prodotti nella quantità indicataAggiornamento dei campi opzionali di un prodotto già nel sistemaFornisce al sistema i dettagli dei prodotti inseritiInserisce nel sistema un prodotto da vendere

Grammatica – Non Terminali Scopo della grammatica:

<S> ::= <CHK><CHK> ::= <InserisciProdotto>| <DettagliProdotti> | <AggiornaProdotto> | <VendiProdotto> | <RimuoviProdotto> | <CercaProdotto>

<InserisciProdotto> ::= inserisci <Prodotto><DettagliProdotti> ::= dettagli prodotti <DUE_PUNTI> <PGS> <PGD><AggiornaProdotto> ::= aggiorna <CercaProdotto> <PGS>

<ParametriOpzionaliProdotto> <PGD><VendiProdotto> ::= vendi ( <CercaProdotto> <PGS> <Quantita> <PGD> )+<RimuoviProdotto> ::= rimuovi <CercaProdotto><CercaProdotto> ::= prodotto <DUE_PUNTI> <PGS> CODICE_A_BARRE

<FRECCIA_DESTRA> <STRINGA> <PUNTO_VIRGOLA> <PGD>

Operazioni principali:

Page 4: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Grammatica – Non Terminali Prodotto:

<Prodotto> :: = prodotto <DUE_PUNTI> <PGS>

CODICE_A_BARRE <FRECCIA_DESTRA> <STRINGA> <PUNTO_VIRGOLA>

PRODUTTORE <FRECCIA_DESTRA> ( <STRINGA> )+ <PUNTO_VIRGOLA>

MODELLO <FRECCIA_DESTRA> ( <STRINGA> )+ <PUNTO_VIRGOLA>

LOTTO_PRODUZIONE <FRECCIA_DESTRA> <STRINGA> <PUNTO_VIRGOLA>

DATA_ACQUISTO <FRECCIA_DESTRA> <Data> <PUNTO_VIRGOLA><Quantita>PREZZO <FRECCIA_DESTRA> ( <DECIMALE> | <INTERO> )

( “euro“ | “€“ ) <PUNTO_VIRGOLA><ParametriOpzionaliProdotto>

<PGD>

Campi obbligatori

per un nuovo

prodotto

Page 5: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Grammatica – Non Terminali Caratteristiche opzionali per un prodotto:

<ParametriOpzionaliProdotto> ::=

( COLORE <FRECCIA_DESTRA> ( <STRINGA> )+ <PUNTO_VIRGOLA> )?

( DESCRIZIONE <FRECCIA_DESTRA> ( <STRINGA> )+ <PUNTO_VIRGOLA> )?

( IMMAGINE <FRECCIA_DESTRA> <PERCORSO> <PUNTO_VIRGOLA> )?

( NUMERO_TELEFONO_PRODUTTORE <FRECCIA_DESTRA> ( <PIU> )* ( <INTERO )+

<PUNTO_VIRGOLA> )?

( NUMERO_FAX_PRODUTTORE <FRECCIA_DESTRA> ( <PIU> )* ( <INTERO )+

<PUNTO_VIRGOLA> )?

( EMAIL_PRODUTTORE <FRECCIA_DESTRA> <STRINGA> ( <PUNTO> <STRINGA> )*

<AT> <STRINGA> ( <PUNTO> <STRINGA>)+ <PUNTO_VIRGOLA> )?

( MADE_IN <FRECCIA_DESTRA> <STRINGA> <PUNTO_VIRGOLA> )?

Posso avere molteplici colori per uno stesso prodotto

Posso inserire più descrizioni dello stesso prodotto

Page 6: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Grammatica – Non Terminali

Quantità prodotto:

<Quantita> ::= QUANTITA <FRECCIA_DESTRA> <INTERO> <PUNTO_VIRGOLA>

<Data> ::= <INTERO> <SEPARATORI_DATA>

<INTERO> <SEPARATORI_DATA>

<INTERO>

Data:

Page 7: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+

<#CARATTERE: [“a”-“z“] | [“A”-“Z“] |[“0”-“9“] | “!“ | “?“ | “/“ | “.“ | “-“ | “\“ | “ “ | “,“><STRINGA: “\““ <CARATTERE> ( <CARATTERE> )* “\““>DEFINIRE STRINGHE

Grammatica - Terminali

<PARENTESI_GRAFFA_SINISTRA: “{“><PARENTESI_GRAFFA_DESTRA: “}“><DUE_PUNTI: “:“><FRECCIA_DESTRA: “-->“><FRECCIA SINISTRA: “<--“>DELIMITARE BLOCCHI LOGICI

<#CIFRA: [“0“-“9“]><INTERO: [“0“-“9“] (<CIFRA>)*><DECIMALE: <INTERO> ( “.“ | “,“ ) <INTERO>> DEFINIRE NUMERI

<PIU: “+“><AT: “@“><PUNTO: “.“><SEPARATORI_DATA: “/“ | “_“ | “.“ | “-“>DEFINIRE DATA, EMAIL E NUMERI TELEFONICI

<#PERCORSO_VALIDO: ([“a“-“z“,“A“-“Z“,“0“-“9“,“ “,“_“])+><NOME_IMMAGINE: "." ("jpg"|"JPG"|"jpeg"|"JPEG"|"png"|"PNG"|"gif"|"GIF"|"bmp"|"BMP”)><#PERCORSO_FILE: ("/" < PERCORSO_VALIDO >)+ ><PERCORSO: <PERCORSO_FILE> <NOME_IMMAGINE>>DEFINIRE URL DI UN’IMMAGINE

Page 8: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+ Esempi frasi del linguaggioInserisci Prodotto

Cerca Prodotto

Vendi Prodotto

Rimuovi Prodotto

Aggiorna Prodottoinserisci prodotto:{

CODICE_A_BARRE --> "4006381333283";PRODUTTORE --> "Stabilo";MODELLO --> "Pen 68";LOTTO_PRODUZIONE --> "aabb1122";DATA_ACQUISTO --> 21-10-2011;QUANTITA --> 3;PREZZO --> 0,99 euro;

}

aggiorna prodotto:{

CODICE_A_BARRE --> "4006381333283";}{

COLORE --> "Verde Limone";DESCRIZIONE --> "PENNARELLO CON PUNTA

DI FIBRA PREGIATA. PUNTA INDEFORMABILE. INCHIOSTRO INODORE A BASE DACQUA. PUNTA MEDIA TRATTO 1MM.";

IMMAGINE --> /Users/Faust/Desktop/Checkout/image/Pen_68.jpg;

EMAIL_PRODUTTORE --> "info"@"stabilo"."com";

MADE_IN --> "Germania";}

prodotto:{

CODICE_A_BARRE --> "4006381333283";}

vendi prodotto:{

CODICE_A_BARRE --> "4006381333283";}{

QUANTITA --> 2;}

rimuovi prodotto:{

CODICE_A_BARRE --> "4006381333283";}

Page 9: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Osservazioni sulla grammatica

La grammatica, nella parte sinistra delle di tutte le produzioni, presenta un unico simbolo non terminale. Le produzioni hanno la forma:

A α con α ∈ (VT∪VN)*, A ∈ VN

Secondo la classificazione di Chomsky è una grammatica di Tipo 2 (Context-Free)

La grammatica non contiene self-embedding, quindi il linguaggio generato è di Tipo 3 (Regolare)

Page 10: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Osservazioni sulla grammatica

La grammatica presenta delle parti di linguaggio opzionali, che possono produrre ε-rules.

Per dire che la grammatica sia LL(1) non è più sufficiente che gli Starter Symbols relativi alle parti destre delle produzioni alternative siano disgiunti.

Per le produzioni come A α in cui α può genare la stringa vuota i Director Symbols sono DS(A α) = SS(α) ∪ FOLLOW(A)

Nel caso in cui α non generi la stringa vuota i Director Symbols coincidono con gli Starter SymbolsEssendo i Director Symbols di produzioni alternative disgiunti, questa è una condizione necessaria e sufficiente per dire che la grammatica è LL(1)

E’ possibile quindi applicare l’analisi ricorsiva discendente (Top-Down) Sono introdotti tanti metodi quanti i simboli non terminali, che si occupano di riconoscere il sotto-

linguaggio generato dal simbolo non terminale associato

E’ necessario dunque considerare i Director Symbols

Page 11: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Architettura del sistema

Frase del linguaggio ParserCHKParserTokenManager

CHKParser

SyntaxTree

InserisciProdotto

CercaProdotto

DettagliProdotti

VendiProdotto

AggiornaProdotto

RimuoviProdotto

QuantitaData

Prodotto

ParametriOpzionaliProdotto

Visitor

IVoidVisitor

DepthFirstVoidVisitor

CheckoutDepthFirstVisitor

SyntaxTreeDepthFirstVisitor

Package Visitor generato da JTB. Contiene l’interfaccia del visitor IVoidVisitor e implementazioni

con visita DepthFirst

Package generato da JavaCC, contiene un lexer per analizzare i singoli token e un parser che

effettua l’analisi sintattica

Percorre l’albero costruendo una sua rappresentazione

Package generato da JTB per la costruzione dell’ASTPercorre l’albero e svolge le

operazioni necessarie effettuando controlli sulla

semantica

Page 12: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Analisi semantica

La classe DepthFirstVoidVisitor è stata estesa da due sottoclassi: CheckoutDepthFirstVisitor:

Effettua controlli semantici sulla frase inserita Crea, modifica, rimuove e restituisce righe dalle

tabelle del database a seconda delle operazioni richieste

SyntaxTreeDepthFirstVisitor: Percorre l’albero e ne crea una sua rappresentazione

semplificata omettendo le produzioni non significative

Ciascun visitor realizza una visita di tipo depth first avvalendosi del meccanismo del double dispatch

Page 13: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Gestione della persistenza Per l’accesso ai dati è stato impiegato il Pattern DAO

(Data Access Object).Il pattern consente di poter sostituire il dispositivo di persistenza senza che questo abbia impatto sulla logica di business.Il sistema è diviso in tre parti:

Logica di accesso ai dati Implementazione JDBC, che astrae dal database

sottostante Implementazione in accordo allo specifico database

Page 14: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Componenti accessoriIl sistema dispone di classi accessorie che svolgono attività secondarie

Classi per l’highlighting e la segnalazione di errori nelle frasi del linguaggio inserite nell’editor

Classi per la generazione automatica delle frasi del linguaggio

Classi per la gestione del flusso di frame proveniente dalla webcam

Classi per la lettura di codici a barre, del tipo EAN-13, da immagini

Page 15: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Interfaccia grafica

ConfermaVendita

ConfermaRimozioneCarrello

GraphicaluserInterfaceCheckoutAboutBox

GraphicaluserInterfaceCheckoutApp

GraphicaluserInterfaceCheckoutView

Frame che lancia l’applicazione

Classe che si occupa della creazione dei vari componenti dell’interfaccia grafica

Finestra di dialogo contenente le informazioni sull’applicazione

Finestra di dialogo per la rimozione di un prodotto dal carrello e per la conferma della vendita di

prodotti

WebcamFrameFrame che permette di visualizzare le immagini

catturate dalla webcam

CarrelloTableModelClasse per la gestione delle tabelle nell’interfaccia

grafica

Componenti principali:

Page 16: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Interfaccia grafica

Campi per l’immissione dei

dati

Frame provenienti dalla

webcam

Selezione operazioni di

gestione

Page 17: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Interfaccia grafica

Dettagli prodotto selezionato

Selezione prodotto

Page 18: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Interfaccia grafica

Prodotti che il cliente vuole acquistare

Prodotti presenti in negozio

Page 19: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Interfaccia grafica

Area di notifica per eventuali messaggi di

errore

Area per la scrittura delle

frasi del linguaggio

Albero che rappresenta

l’esecuzione di un comando

Highlighting del codice

Page 20: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Test e collaudi

Suite di test JUnit per verificare la correttezza delle operazioni di lettura e scrittura verso il database

File con opportuni errori sintattici e semantici al fine di collaudare il sistema a fronte di situazioni di errore

Predisposti opportuni messaggi per segnalare all’utente eventuali errori sintattici e semantici Errori sintattici viene segnalata riga e colonna dell’errore e

il carattere inaspettato Errori semantici viene esplicitamente segnalato l’errore

Page 21: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+Tecnologie

Linguaggio di programmazione Java 1.6.0_26

Ambienti di sviluppo Eclipse Helios 3.6.2 NetBeans 7.0.1

Generazione lexer e parser JavaCC (Plug-in Eclipse)

1.5.24

Generazione visitor e APT Java Tree Builder (Plug-in

Eclipse) 1.5.24

Generazione delle documentazione JJDoc 5.0-4

Testing JUnit 4.8.1

Database Oracle MySQL

5.5.14

Page 22: + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

+ Limiti e sviluppi futuri Supporto da parte del linguaggio dell’aspetto fiscale

legato alle transazioni

Estensione del linguaggio con nuove operazioni

Gestione di più negozi, con eventuali scambi tra di essi

Gestione di categorie di prodotti differenziate, ad esempio alimentari, farmaceutici, elettrici…

Supporto a webcam non QuickTime compatibili

Riconoscimento di codici a barre diversi da quelli in formato EAN-13