1 / 22

Checkout

Fabio Ferretti. Progetto per l’esame di Linguaggi e Modelli Computazionali LS. Checkout. Linguaggio per la gestione di una cassa. Anno Accademico: 2009-2010. Obiettivi del progetto. Creare un linguaggio per gestire le operazioni della cassa di un negozio

Download Presentation

Checkout

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. Fabio Ferretti Progetto per l’esame di Linguaggi e Modelli Computazionali LS Checkout Linguaggio per la gestione di una cassa Anno Accademico: 2009-2010

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

  3. Grammatica – Non Terminali <S> ::= <CHK> <CHK> ::= <InserisciProdotto>| <DettagliProdotti> | <AggiornaProdotto>| <VendiProdotto> | <RimuoviProdotto>| <CercaProdotto> • Scopo della grammatica: • Operazioni principali: <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> Operazione che elimina dal sistema prodotti nella quantità indicata Aggiornamento dei campi opzionali di un prodotto già nel sistema Cerca tra i prodotti presenti una specifica categoria Rimozione dal sistema di una categoria di prodotti Fornisce al sistema i dettagli dei prodotti inseriti Inserisce nel sistema un prodotto da vendere

  4. Grammatica – Non Terminali <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> • Prodotto: Campi obbligatori per un nuovo prodotto

  5. Grammatica – Non Terminali Posso avere molteplici colori per uno stesso 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> )? • Caratteristiche opzionali per un prodotto: Posso inserire più descrizioni dello stesso prodotto

  6. Grammatica – Non Terminali • Quantità prodotto: <Quantita> ::= QUANTITA <FRECCIA_DESTRA> <INTERO> <PUNTO_VIRGOLA> • Data: <Data> ::= <INTERO> <SEPARATORI_DATA> <INTERO> <SEPARATORI_DATA> <INTERO>

  7. Grammatica - Terminali DELIMITARE BLOCCHI LOGICI <PARENTESI_GRAFFA_SINISTRA: “{“> <PARENTESI_GRAFFA_DESTRA: “}“> <DUE_PUNTI: “:“> <FRECCIA_DESTRA: “-->“> <FRECCIA SINISTRA: “<--“> DEFINIRE STRINGHE <#CARATTERE: [“a”-“z“] | [“A”-“Z“] |[“0”-“9“] | “!“ | “?“ | “/“ | “.“ | “-“ | “\“ | “ “ | “,“> <STRINGA: “\““ <CARATTERE> ( <CARATTERE> )* “\““> DEFINIRE NUMERI <#CIFRA: [“0“-“9“]> <INTERO: [“0“-“9“] (<CIFRA>)*> <DECIMALE: <INTERO> ( “.“ | “,“ ) <INTERO>> <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

  8. Esempi frasi del linguaggio Inserisci Prodotto inserisci 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 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"; } Vendi Prodotto vendi prodotto: { CODICE_A_BARRE--> "4006381333283"; } { QUANTITA --> 2; } Cerca Prodotto Rimuovi Prodotto prodotto: { CODICE_A_BARRE--> "4006381333283"; } rimuoviprodotto: { CODICE_A_BARRE--> "4006381333283"; }

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

  10. 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. E’ necessario dunque considerare i DirectorSymbols Per le produzioni come A  α in cui α può genare la stringa vuota i DirectorSymbols sono DS(A  α) = SS(α) ∪ FOLLOW(A)Nel caso in cui α non generi la stringa vuota i DirectorSymbols coincidono con gli Starter Symbols Essendo i DirectorSymbols 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

  11. Package generato da JavaCC, contiene un lexer per analizzare i singoli token e un parser che effettua l’analisi sintattica Architettura del sistema Parser CHKParserTokenManager CHKParser Frase del linguaggio Package Visitor generato da JTB. Contiene l’interfaccia del visitorIVoidVisitor e implementazioni con visita DepthFirst SyntaxTree Package generato da JTB per la costruzione dell’AST Visitor Percorre l’albero e svolge le operazioni necessarie effettuando controlli sulla semantica IVoidVisitor InserisciProdotto DettagliProdotti Percorre l’albero costruendo una sua rappresentazione DepthFirstVoidVisitor Prodotto CercaProdotto ParametriOpzionaliProdotto AggiornaProdotto CheckoutDepthFirstVisitor SyntaxTreeDepthFirstVisitor VendiProdotto RimuoviProdotto Data Quantita

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

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

  14. Componenti accessori Il 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

  15. Interfaccia grafica Componenti principali: GraphicaluserInterfaceCheckoutApp Frame che lancia l’applicazione Classe che si occupa della creazione dei vari componenti dell’interfaccia grafica GraphicaluserInterfaceCheckoutView Finestra di dialogo contenente le informazioni sull’applicazione GraphicaluserInterfaceCheckoutAboutBox ConfermaRimozioneCarrello Finestra di dialogo per la rimozione di un prodotto dal carrello e per la conferma della vendita di prodotti ConfermaVendita WebcamFrame Frame che permette di visualizzare le immagini catturate dalla webcam CarrelloTableModel Classe per la gestione delle tabelle nell’interfaccia grafica

  16. Interfaccia grafica Frame provenienti dalla webcam Selezione operazioni di gestione Campi per l’immissione dei dati

  17. Interfaccia grafica Dettagli prodotto selezionato Selezione prodotto

  18. Interfaccia grafica Prodotti che il cliente vuole acquistare Prodotti presenti in negozio

  19. Interfaccia grafica Area per la scrittura delle frasi del linguaggio Albero che rappresenta l’esecuzione di un comando Highlighting del codice Area di notifica per eventuali messaggi di errore

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

  21. Tecnologie • Linguaggio di programmazione • Java 1.6.0_26 • Ambienti di sviluppo • EclipseHelios 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 MySQL5.5.14

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

More Related