200 likes | 348 Views
Model Drive. Corso di Laurea Specialistica in Ingegneria Informatica. Applicazione per il pilotaggio di veicoli. Esame di Linguaggi e Modelli computazionali LS Prof. Enrico Denti Progetto di Maria Teresa Roccia. Model Drive. Quali obiettivi e come raggiungerli.
E N D
Model Drive Corso di Laurea Specialistica in Ingegneria Informatica Applicazione per il pilotaggio di veicoli Esame di Linguaggi e Modelli computazionali LSProf. Enrico DentiProgetto di Maria Teresa Roccia Model Drive
Quali obiettivi e come raggiungerli Requisiti di base dell’applicazione: • Controllare la correttezza di sequenze di comandi per il pilotaggio di diversi modellini di macchine, elicotteri o barche. • Esplicitare l’effetto prodotto dall’eventuale esecuzione sul modello del veicolo scelto della particolare sequenza immessa. • I comandi devono poter essere forniti mediante il supporto di un’interfaccia. • Sul modellino è possibile settare 10 differenti valori di accelerazione, da 0 (accelerazione nulla) a 9 (accelerazione massima), che modificano la velocità con cui il modello si muove. • I modellini si differenziano fra loro per il colore (rosso, nero, verde, grigio, blu e giallo). • La portata massima del radio comando è pari a 30 mt. Occorre disporre di: • Un linguaggio specifico per il pilotaggio di modelli di veicolo. • Un interprete per • Controllo della correttezza delle frasi del linguaggio immesse • Descrizione dei movimenti del veicolo a seguito della sequenza delle frasi corrette immesse dall'utente. Definizione di Grammatica Analisi lessicale e sintattica Analisi semantica Model Drive
Up Approccio al problema:Spazio d'azione e possibili movimenti TYPE DIRECTION 2D 3D Backward Left Right Left Right Forward Forward Down Quale grammatica per quale linguaggio? Model Drive
Grammatica BNF: l’idea di partenza (1/1) S ::= <DRIVE> <DRIVE> ::= <TYPE> <INSTRUCTIONS><DOT> <TYPE> ::=<DIMENSION><MODEL><DDOT> <DIMENSION> := 2D_Drive | 3D_Drive <MODEL>::=Car_ | Boat_ | Helicopter_ <ID>::=Red | Green | Black | Yellow | Blue | Grey <INSTRUCTIONS> ::= <START_CMD> <CMDS> <START_CMD> ::=<START> <END_CMD> <CMDS> ::= <CMD> <CMDS> | <STOP_CMD> <CMD> ::=<DIR> <DIST> < SPEEDUP > <END_CMD> <DIR>::=forward | left | right | backward | up | down <DIST> ::=<LP><MT> <DOT> <CM> <RP> < SPEEDUP > ::= <PLUS> <DIGIT> | <MINUS> <DIGIT> <MT> ::=<ZERO_TWO><DIGIT> <CM> ::= <DIGIT><DIGIT> <DIGIT> ::=<ZERO_TWO> | <THREE_NINE> <ZERO_TWO>::=0 | 1 | 2 <THREE_NINE>::=3 | 4 | 5 | 6 | 7 | 8 | 9 <STOP_CMD> ::=<STOP> <DOT> <LP>::=( <RP>::=) <END_CMD>::=; <DOT>::=. <DDOT>::=: <PLUS>::=+ <MINUS>::=- <STOP>::=OFF <START>::=ON Model Drive
Grammatica BNF: l’idea di partenza (1/2) Grammatica Context-Free (Tipo 2)Secondo Chomsky Quale grammatica? S ::= <DRIVE> <DRIVE> ::= <TYPE> <INSTRUCTIONS><DOT> <TYPE> ::=<DIMENSION><MODEL><DDOT> <DIMENSION> := 2D_Drive | 3D_Drive <MODEL>::=Car_ | Boat_ | Helicopter_ <ID>::=Red | Green | Black | Yellow | Blue | Grey <INSTRUCTIONS> ::= <START_CMD><CMDS> <START_CMD> ::=<START> <END_CMD> <CMDS> ::= <CMD> <CMDS> | <STOP_CMD> <CMD> ::=<DIR> <DIST> < SPEEDUP > <END_CMD> <DIR>::=forward | left | right | backward | up | down <DIST> ::=<LP><MT> <DOT> <CM> <RP> < SPEEDUP > ::= <PLUS> <DIGIT> | <MINUS> <DIGIT> <MT> ::=<ZERO_TWO><DIGIT> <CM> ::= <DIGIT><DIGIT> <DIGIT> ::=<ZERO_TWO> | <THREE_NINE> <ZERO_TWO>::=0 | 1 | 2 <THREE_NINE>::=3 | 4 | 5 | 6 | 7 | 8 | 9 <STOP_CMD> ::=<STOP> <DOT> Ricorsione, NO SELF-EMBEDDING Quale linguaggio? Linguaggio regolare <LP>::=( <RP>::=) <END_CMD>::=; <DOT>::=. <DDOT>::=: <PLUS>::=+ <MINUS>::=- <STOP>::=OFF Model Drive
Grammatica BNF: l’idea di partenza (1/3) Grammatica LL(K)? S ::= <DRIVE> <DRIVE> ::= <TYPE> <INSTRUCTIONS><DOT> <TYPE> ::=<DIMENSION><MODEL><DDOT> <DIMENSION> := 2D_Drive | 3D_Drive <MODEL>::=Car_ | Boat_ | Helicopter_ <ID>::=Red | Green | Black | Yellow| Blue | Grey <INSTRUCTIONS> ::= <START_CMD><CMDS> <START_CMD> ::=<START> <END_CMD> <CMDS> ::= <CMD> <CMDS> | <STOP_CMD> <CMD> ::=<DIR> <DIST> <SPEEDUP> <END_CMD> <DIR>::=forward | left | right | backward | up | down <DIST> ::=<LP><MT> <DOT> <CM> <RP> <SPEEDUP> ::= <PLUS> <DIGIT> | <MINUS> <DIGIT> <MT> ::=<ZERO_TWO><DIGIT> <CM> ::= <DIGIT><DIGIT> <DIGIT> ::=<ZERO_TWO> | <THREE_NINE> <ZERO_TWO>::=0 | 1 | 2 <THREE_NINE>::=3 | 4 | 5 | 6 | 7 | 8 | 9 <STOP_CMD> ::=<STOP> <DOT> LL(1) Controllo a livello sintattico:- Troppo vincolante: grammatica con scarsa possibilità di riuso- Inutile: il controllo a livello semantico è comunque necessario Model Drive
Grammatica BNF: l’idea di partenza (1/4) S ::= <DRIVE> <DRIVE> ::= <TYPE> <INSTRUCTIONS><DOT> <TYPE> ::=<DIMENSION><MODEL><DDOT> <DIMENSION> := 2D_Drive | 3D_Drive <MODEL>::=Car_ | Boat_ | Helicopter_ <ID>::=Red | Green | Black | Yellow | Blue | Grey <INSTRUCTIONS> ::= <START_CMD><CMDS> <START_CMD> ::=<START> <END_CMD> <CMDS> ::= <CMD> <CMDS> | <STOP_CMD> <CMD> ::=<DIR> <DIST> <SPEEDUP> <END_CMD> <DIR>::=forward | left | right | backward | up | down <DIST> ::=<LP><MT> <DOT> <CM> <RP> <SPEEDUP> ::= <PLUS> <DIGIT> | <MINUS> <DIGIT> <MT> ::=<ZERO_TWO><DIGIT> <CM> ::= <DIGIT><DIGIT> <DIGIT> ::=<ZERO_TWO> | <THREE_NINE> <ZERO_TWO>::=0 | 1 | 2 <THREE_NINE>::=3 | 4 | 5 | 6 | 7 | 8 | 9 <STOP_CMD> ::=<STOP> <DOT> DIST: mt.cmoppure km.mtoppure cm.mm … <INTEGER_DIST> ::= <DIGIT> <DIGIT> <DECIMAL_DIST> ::= <DIGIT> <DIGIT> <DIGIT> ::=0 | 1 |2 |3 | 4 | 5 | 6 | 7 | 8 | 9 Model Drive
Grammatica utilizzata EBNF Grammatica Context-Free (Tipo 2)Secondo Chomsky S ::= <DRIVE> <DRIVE> ::= <TYPE> <INSTRUCTIONS><DOT> <TYPE> ::=<DIMENSION><MODEL><ID><DDOT> <DIMENSION> := 2D_Drive | 3D_Drive <MODEL>::=Car_ | Boat_ | Helicopter_ <ID>::=Red | Green | Black | Yellow| Blue | Grey <INSTRUCTIONS> ::= <START_CMD><CMDS> <START_CMD> ::=<START> <END_CMD> <CMDS> ::={<CMD>} <STOP_CM> <CMD> ::=<DIR> <DIST> < SPEEDUP > <END_CMD> <DIR>::=forward | left | right | backward | up | down <DIST> ::=<LP><INTEGER_DIST> <DOT> <DECIMAL_DIST> <RP> <SPEEDUP> ::= (<PLUS> | <DIGIT>) <DIGIT> <INTEGER_DIST> ::= <DIGIT> <DIGIT> <DECIMAL_DIST> ::= <DIGIT> <DIGIT> <DIGIT> ::=0 | 1 |2 |3 | 4 | 5 | 6 | 7 | 8 | 9 <STOP_CMD> ::=<STOP> <DOT> <START>::=ON <STOP>::=OFF LL(1) Linguaggio regolare <LP>::=( <RP>::=) <END_CMD>::=; <DOT>::=. <DDOT>::=: <PLUS>::=+ <MINUS>::=- Model Drive
2D Backward Left Right Forward Analisi Sintattica: limiti 2D_Drive Car_Red: ON; forward(21.15)+5; OFF. 2D_Drive Car_Red: forward(21.15)+5; OFF. Il modello deve essere acceso e poi pilotato! 2D_Drive Car_Red: ON; up(21.15)+5; OFF. La frase è sintatticamente corretta, ma il modello non può volare! 2D_Drive Car_Red: ON; forward(21.15)+0; OFF. La frase è sintatticamente corretta, ma il modello si muoverà? Model Drive
Analisi Semantica: il calcolo del significato In generale Che significato si attribuisce ad una frase sintatticamente corretta di un linguaggio? In particolare: Come si muoverà il modellino scelto a seguito dell’eventuale esecuzione di una corretta sequenza di comandi? Dipende dai valori settati come distanza ed accelerazione, ma soprattutto dal particolare modellino in uso Ho bisogno di una funzione di valutazione per ogni modellino! Possibili metodologie risolutive: Metodologia object-oriented: Metodo di interpretazione interno alle classi Ma nuova interpretazione => Definizione del nuovo metodo in tutte le classi! Model Drive
Alcune classi sintattiche: esempio • Interpretare i movimenti di un aereo: • Possibilità di decollare solo • Dopo aver raggiunto una certa accelerazione • Se ha a disposizione una certa distanza • Con un determinato comando di direzione,… Model Drive
Analisi Semantica: il calcolo del significato In generale Che significato si attribuisce ad una frase sintatticamente corretta di un linguaggio? In particolare: Come si muoverà il modellino scelto a seguito dell’eventuale esecuzione di una corretta sequenza di comandi? Dipende dai valori settati come distanza ed accelerazione, ma soprattutto dal particolare modellino in uso Ho bisogno di una funzione di valutazione per ogni modellino! Possibili metodologie risolutive: Metodologia funzionale: Funzione di interpretazione esterna alle classi Ma nuova produzione => Modifica di tutte le funzioni di interpretazione! Metodologia object-oriented: Metodo di interpretazione interno alle classi Ma nuova interpretazione => Definizione del nuovo metodo in tutte le classi! Model Drive
Analisi Semantica: il calcolo del significato In generale Che significato si attribuisce ad una frase sintatticamente corretta di un linguaggio? In particolare: Come si muoverà il modellino scelto a seguito dell’eventuale esecuzione di una corretta sequenza di comandi? Dipende dai valori settati come distanza ed accelerazione, ma soprattutto dal particolare modellino in uso Ho bisogno di una funzione di valutazione per ogni modellino! Il punto di incontro: Pattern Visitor e tecnica del double dispatch Un oggetto Visitor localizza la funzione di valutazione seguendo l’approccio funzionale e fornendo l’operazione chiamata di solito visit Sono possibili tante versioni della stessa funzione di valutazione quante le classi della tassonomia, seguendo l’approccio object-oriented (oveloading visit) Model Drive
Generazione automatica del riconoscitore LL: Classi sintattiche e Visitor vengono create in modo automatico Le azioni semantiche riguardano solo il Visitor Documento per la grammatica Strumenti utilizzati • Java 1.6.0_03 • NetBeans 6.1 • JavaCC 4.1 • JavaCC “companion tools”: • Java Tree Builder 1.2.2 • JJDoc Model Drive
Analisi Semantica: pattern Visitor e double-dispatch Interpretare i movimenti di un nuovo tipo di modellino significa semplicemente introdurre un nuovo oggetto Visitor Create in automatico (JavaTreeBuilder) Model Drive
Analisi Semantica: pattern Visitor e double-dispatch Anche espandere la grammatica fornendo nuove funzionalià all’applicazione non è un più un problema! Create in automatico (JavaTreeBuilder) Model Drive
Un esempio L’utente decide che vuole avere la possibilità di stabilire fra due o più veicoli qual è quello programmato in modo migliore per raggiungere una determinata destinazione, dato un certo punto di partenza! S ::= <DRIVE> | <BEST_DRIVERS> <BEST_DRIVERS> ::= <SET_START_POS> <SET_STOP_POS> <DRIVERS> . . . <DRIVERS> ::= <DRIVE> {<DRIVE>} . . . . . . Model Drive
Analisi Semantica: esplicitazione del significato • Esplicitazione semantica: • Descrizione verbale, sì ma… • Rappresentazione grafica (mediante la classe ActionSpace) Model Drive
Sviluppi possibili • Migliorare l’esplicitazione semantica mediante rappresentazione grafica tridimensionale dei movimenti (ad esempio utilizzando java3d) • Pilotaggio di altri tipi di modellini oltre a quelli inseriti, ad esempio • Aereo: si può muovere quasi come una macchina, ma anche come un elicottero, ponendo attenzione alle fasi di atterraggio e di decollo che sono più complesse • Sottomarino: si può muovere come una barca, ma anche su e giù come un elicottero, … • Pilotaggio di più modellini contemporaneamente • Per gare di velocità lungo un prefissato percorso • Per individuare il percorso più breve date le coordinate di partenza e di arrivo, … • Descrizione più precisa dello spazio d’azione (oltre le sole coordinate e la portata massima), ad esempio • Tenendo conto di inclinazioni e pendenze (che modificano le fasi di atterraggio o le velocità dei veicoli) • Per fissare percorsi o ostacoli, … • Immaginare diversi possibili scenari applicativi andando oltre i modellini • Movimento di nastri o bracci meccanici sincronizzati • Movimento di un veicolo-aspirapolvere automatico programmato in base ad una precisa planimetria, … Model Drive
DRIVE a MODEL Model Drive