Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoTeodora Baroni Modificato 9 anni fa
1
CAKE Ambiente per la scrittura e la riproduzione audio di ricette per torte Linguaggi e Modelli Computazionali LSElisabetta Visciotti
2
Obiettivi Creare un ambiente che permetta la scrittura di ricette di torte Realizzare una grammatica che ci permetta di definire senza ambiguità, mediante delle notazioni formali, le frasi del linguaggio che vogliamo generare. Il linguaggio deve essere: –comprensibile –di facile utilizzo per ogni tipologia di utente Sviluppare l’interprete: –che accetti in ingresso una stringa di caratteri, riconosca se la stringa è una f rase del linguaggio (analisi sintattica), in caso positivo esegua l’analisi sema ntica. Riprodurre in formato audio la ricetta inserita: –utilizzando un sintetizzatore vocale
3
Grammatica (1/4) ::=Information Ingredients Preparation ::= ; ; ; ::= ( ;)+ :: = ;( ;)* ; ;[ ;][ ;] Struttura ricetta Scope
4
Grammatica (2/4) ::= Ingredient(, ) ::= grams | ::= Name( ) ::= Makes( ) ::= Difficulty( ) ::= easy | medium | hard Informazioni torta Ingredienti torta
5
::= Mix( {, }) ::= Add( {, }) ::= Transfer( ) ::= Bake( ) ::= Fill( {, }) ::= Decorate( {, }) ::= cake pan ::=, ::= round | rectangular | square ::= centigrade ::= minutes ::= Grammatica (3/4) Preparazione torta
6
Grammatica (4/4) ::= ( )+ Stringhe di input Numeri maggiori di zero
7
Esempio di ricetta(1/2) INFORMATION Name (Black Forest); Makes (8); Difficulty (medium); INGREDIENTS Ingredient (6,eggs); Ingredient (grams 250, sugar); Ingredient (grams 100, seed oil); Ingredient (grams 100, milk); Ingredient (grams 200, flour); Ingredient (grams 120, cocoa); Ingredient (grams 200, nutella); Ingredient (grams 250, whipped cream); Ingredient (grams 80, chocolate chips); Ingredient (1, sachet yeast); Ingredient (1, sachet vanillin); ::= ; ; ; ::= ( ;)+
8
Esempio di ricetta(2/2) PREPARATION Mix (eggs, sugar); Add (seed oil, milk); Add (cocoa); Add (flour, sachet yeast); Add (sachet vanillin); Transfer (round cake pan); Bake (180 centigrade, 40 minutes); Fill (whipped cream, nutella); Decorate (whipped cream, chocolate chips); In questo esempio ci sono anche le parti opzionali come Fill e Decorate Qui Add è stato utilizzato più volte :: = ;( ;)* ; ;[ ;][ ;]
9
Grammatica e Linguaggio (1/2) Grammatica: la grammatica è di tipo 2 (context free) secondo la classificazione di Chomsky. Infatti ci sono produzioni vincolate alla forma: A → α con α є (VT U VN)* ed A є VN Linguaggio: il linguaggio generato è di tipo 3 (linguaggio regolare) in quanto è possibile notare che la grammatica non presenta self-embedding, ovvero non prevede simboli non terminali autoinclusivi del tipo: A → β A δ dove A є VN e δ,β є V +
10
La grammatica è priva di ε – rules. Il linguaggio quindi non prevede l’uso della stringa vuota, neanche a livello di scope, anche perché una ricetta vuota non avrebbe alcun senso. Condizione necessaria e sufficiente affinché una grammatica sia LL(1), poiché la grammatica è priva di ε – rules, è che per ogni metasimbolo, che appare alla sinistra di più produzioni, gli starter symbol corrispondenti alle parti destre delle produzioni alternative siano disgiunti. Si può dunque concludere che siamo in presenza di una GRAMMATICA LL(1) NOTA: Nel caso ci fosse stata la stringa vuota si sarebbe potuto ricorrere ad una tecnica di riscrittura in grado di eliminarla da tutte le produzioni, al più sarebbe comparsa solo nello scope (S ε, dove però S non compare nella parte destra di alcuna produzione). Grammatica e Linguaggio(2/2)
11
Schema di funzionamento: Correttezza lessicale e Correttezza sintattica Scanner AST Parser Sequenza di caratteri Sequenza di token Analisi Lessicale: vengono i ndividuate le singole parole ( token) di una frase Analisi Sintattica: si verifica che una frase sia costruita secondo le regole grammaticali che descrivono il linguaggio Rappresentazione della frase
12
La classe DepthFirstVisitor (generata da JTB) è stata estesa da due sottoclassi: –TreeVisitor: nel momento in cui si ha la correttezza sintattica e semantica, crea una rappresentazione sotto forma di albero della ricetta inserita –ReadVisitor: a seguito della correttezza sintattica e semantica, crea una rappresentazione testuale della ricetta che sarà poi utilizzata da un gestore grafico esterno per riprodurre sotto forma di audio la ricetta. Il gestore grafico si occupa di gestire il sintetizzatore vocale. Questa scelta permette di disaccoppiare il gestore grafico, realizzato come Singleton, dal visitor. Visitor
13
Schema di funzionamento: Correttezza semantica TreeVisitor ReadVisitor Rappresentazione testuale AST
14
Semantica: Information: –Il numero di porzioni deve essere compreso nel range di valori: 2 - 20 Ingredients: –Ogni ingrediente inserito non deve superare i 3000 grammi Preparation: –La temperatura del forno deve essere compresa nel range: 100 - 250 gradi –Il tempo di cottura è compreso fra i 20 e 120 minuti Semantica
15
Strumenti utilizzati Linguaggio di programmazione: Java jdk 1.6.0_16 Ambiente di sviluppo: Eclipse Galileo Implementazione Java Speech: FreeTTS versione 1.2.1 Generazione del parser e dello scanner: JavaCC 4.2 Generazione automatica delle classi necessarie per creare l’APT (o AST) e implementazione di visitor che operano DepthFirst: JTB 1.3.2 Generazione della documentazione: JJDoc
16
Architettura: Packages syntaxtree: classi generate da JTB per la costruzione dell’AST visitor: classi generate da JTB e visitor creati su estensione della classe DepthFirstVisitor parser: classi relative allo scanner e al parser generate da JavaCC gui: classi grafiche cake: classi per l’elaborazione utility: classi di appoggio Add.java Bake.java CakePan.java … DepthFirstVisitor.java TreeVisitor.java ReadVisitor.java … CakeParser.java Token.java … CakeFrame.java CakePanel.java TreePanel.java … Manager.java CakeRecipe.java … TxtFileReader.java TxtFilter.java …
17
Classi generate da JavaCC Lexer: contiene il metodo getNextToken(), il quale implementa l’ASF deterministico che riconosce i token descritti dalle espres sioni regolari Parser: chiama il lexer ogni volta che necessita del prossimo token. Cont iene un metodo per ogni simbolo non ter minale presente nella specifica della gra mmatica Ogni chiamata al metodo getNextToken() re stituisce un oggetto di questa classe
18
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 (risultante dall’analisi intermedia del Parser). Le classi visitate accetteranno la visita richiamando il metodo visit con argomentio “this”.
19
Interfaccia Grafica (1/4) Form necessaria per inserire le informazioni riguardanti la torta Al momento della pressione del tasto OK si verifica l’inserimento dei dati nei vari ca mpi Insert bar: permette all’utente di introdurre le informazioni generali della torta, la lista degl i ingredienti e il procedimento
20
Interfaccia Grafica (2/4) Form necessaria per inserire gli ingredienti Al momento della pressione del tasto OK o NEXT si verifica l’inserimento dei dati nei vari campi
21
Interfaccia Grafica (3/4) Form necessaria per inserire il procedimento Al momento della pressione del tasto OK si verifica l’inserimento dei dati nei vari ca mpi
22
Interfaccia Grafica (4/4) L’utente può così ascoltare la ri cetta inserita
23
Test Sono stati eseguiti diversi test al fine di verificare la correttezza del progetto: –Inserimento di frasi non corrette sintatticamente: Makes (0); il parser risponde con un messaggio di errore indicando la riga e la colonna in cui è presente l’errore, infatti sintatticamente è sbagliata poiché i numeri devono essere tutti maggiori di zero. Ingredient (gram 200, flour); il parser risponde con un messaggio di errore poiché si aspetta grams e non gram. –Inserimento di frasi corrette sintatticamente ma non semanticamente: Makes (25); il parser fa il check della frase e dice che va tutto bene sintatticamente ma nel momento in cui si attiva uno dei due visitor abbiamo un errore: il numero di porzioni non rientra nel range prestabilito. Ingredient (grams 4500, flour); semanticamente sbagliata, supera il limite massimo consentito per la quantità. Sono stati effettuati anche diversi test per quanto riguarda l’interfaccia grafica affinchè si riesca a far fronte ad eventuali errori dell’utente.
24
Sviluppi futuri Poter inserire non solo ricette di torte ma ricette di dolci in generale Poter inserire più ricette contemporaneamente Memorizzare la voce del sintetizzare in modo da creare un piccolo archivio di file audio E tanto altro ancora…
25
FINE
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.