corso di laurea specialistica in ingegneria informatica model drive applicazione per il pilotaggio...
TRANSCRIPT
Corso di Laurea Specialistica in Ingegneria Informatica
Model DriveModel DriveApplicazione per il pilotaggio Applicazione per il pilotaggio
di veicolidi veicoli
Esame di Linguaggi e Modelli computazionali LS
Prof. Enrico Denti
Progetto di Maria Teresa Roccia
Model Drive
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.
Model Drive
Quali obiettivi e come raggiungerli
Definizione di Grammatica
Analisi lessicale e sintattica
Analisi semantica
Up
Model Drive
Approccio al problema:Spazio d'azione e possibili movimenti
3D
2D
Forward
Left
Right
Forward
Left
Right
Down
Backward
TYPE
DIRECTION
Quale grammatica per quale linguaggio?
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>
Model Drive
Grammatica BNF: l’idea di partenza (1/1)
<LP> ::= (
<RP> ::= )
<END_CMD> ::= ;
<DOT> ::= .
<DDOT> ::= :
<PLUS> ::= +
<MINUS> ::= -
<STOP> ::= OFF
<START> ::= ON
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-EMBEDDINGQuale linguaggio?
Model Drive
Grammatica Context-Free
(Tipo 2)Secondo Chomsky
Linguaggio Linguaggio regolareregolare
Quale grammatica?
<LP> ::= (
<RP> ::= )
<END_CMD> ::= ;
<DOT> ::= .
<DDOT> ::= :
<PLUS> ::= +
<MINUS> ::= -
<STOP> ::= OFF
Grammatica BNF: l’idea di partenza (1/2)
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>
Model Drive
Grammatica BNF: l’idea di partenza (1/3)
Controllo a livello sintattico:
- Troppo vincolante: grammatica con scarsa possibilità di riuso- Inutile: il controllo a livello semantico è comunque necessario
LL(1)LL(1)
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>
Model Drive
Grammatica BNF: l’idea di partenza (1/4)
<INTEGER_DIST> ::= <DIGIT> <DIGIT>
<DECIMAL_DIST> ::= <DIGIT> <DIGIT>
<DIGIT> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
DIST: mt.cmoppure km.mtoppure cm.mm …
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
Model Drive
Grammatica utilizzata EBNF
<LP> ::= (
<RP> ::= )
<END_CMD> ::= ;
<DOT> ::= .
<DDOT> ::= :
<PLUS> ::= +
<MINUS> ::= -
Grammatica Context-Grammatica Context-Free Free
(Tipo 2)(Tipo 2)Secondo ChomskySecondo ChomskyLL(1)LL(1)
Linguaggio Linguaggio regolareregolare
Model Drive
Analisi Sintattica: limiti
2D_Drive Car_Red:
forward(21.15)+5;
OFF.
2D_Drive Car_Red:
ON;
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
Forward
Left
Right
Backward
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 significatoIn 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: esempioInterpretare 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 significatoIn 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 significatoIn 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
Strumenti utilizzati
• Java 1.6.0_03• NetBeans 6.1• JavaCC 4.1• JavaCC “companion tools”:
- Java Tree Builder 1.2.2- JJDoc
Le azioni semantiche riguardano solo il
VisitorDocumento per la grammatica
Generazione automatica del riconoscitore LL:
Classi sintattiche e Visitor
vengono create in modo
automatico
Model Drive
Analisi Semantica: pattern Visitor e double-dispatch
Create in automatico (JavaTreeBuilder)
Interpretare i movimenti di un
nuovo tipo di modellino significa
semplicemente introdurre un nuovo
oggetto Visitor
Model Drive
Analisi Semantica: pattern Visitor e double-dispatch
Create in automatico (JavaTreeBuilder)
Anche espandere la grammatica
fornendo nuove funzionalià
all’applicazione non è un più un problema!
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, …