SlideShare una empresa de Scribd logo
1 de 18
Camera Parser
             autore: Carlo Zamagni



Progetto per l’esame di linguaggi e modelli computazionali LS



   Prof. Enrico Denti       anno accademico 2006/2007
Problematica e scopo del progetto

Le telecamere IP sono controllate mediante parametri passati via HTTP a degli script CGI


                   esempio:

                   http://192.168.0.240/control/control?
                   set&section=general&coverimage_area=0,540,380,200,200,2
                   %0A1,320,100,100,150,2
                                      tratto dalle HTTP-API di Mobotix




    • leggibilità nulla


    • soggetti a variazioni anche all’interno di uno stesso modello da un firmware all’altro


    • difficilissimo gestire ambienti con dispositivi eterogenei
Problematica e scopo del progetto


Sarebbe comodo disporre di un semplice linguaggio con il quale specificare in modo “umano” dei comandi e
gestirne l’invio a delle entità:


      ...qualcosa di simile a questo:



                              nuova telecameraX 192.168.0.240 tipo: mobotix
                           copertura 540 380 200 200 opacità 2 su telecameraX
                           area sensibile 0 0 10 100 soglia 30 su telecameraX

                                 nuova telecameraY 192.168.0.2 tipo: axis
                                    risoluzione 640*480 su telecameraY
Dominio applicativo
Le informazioni che il parser dovrà trattare rappresentano dei comandi e pertanto si può individuare una “forma”
comune che permetta di specificare:

            • il tipo di comando: verranno inseriti i comandi basilari per l’impostazione di una
              telecamera quali le regolazioni di luminosità, contrasto, risoluzione; per il rilevamento
              del movimento e la rotazione del dispositivo.


            • il destinatario dell’informazione: un dispositivo già specificato nell’ambiente che si
              andrà a creare. Sarebbe opportuno che anche la definizione di nuove entità potesse
              essere espressa dal linguaggio.


            • l’argomento del comando selezionato dall’utente: tipicamente un intero oppure una
              serie di valori interi.


            • eventuali parametri aggiuntivi.
Gli strumenti




JavaCC
La grammatica (notazione jj)
Scopo della grammatica: la definizione di un generico comando
                                                                         Altri token
                                                                          < CAM: "camera:" >
             void Scope():{}{Cmd() Cam() <EOF>}                          | < DOT: "." >
                                                                         | < MAKE: "make:" >
                                                                         | < NEW: "new" >
                                                                         | < MOTION: "motion" >
                                                                         | < BACKLIGHT: "backlight" >
                                                                         | < SHARPNESS: "sharpness" >
                                                                         | < RESOLUTION: "resolution" >
                                                                         | < ROTATE: "rotate" >
                                                                         | < LEFT: "left" >
Valori interi ed identificatori:                                          | < RIGHT: "right" >
                                                                         | < PORT: "port" >
< INT: ["0"-"9"] (["0"-"9"])* >                                          | < ADD: "add" >
                                                                         | < REMOVE: "remove" >
< IDENT: (<CHAR> | ["0"-"9"] | <SYMBOL>)+>
| <#SYMBOL: "_" | "$" | "%" | "-" | "^" | "#" | "&" | "," | ";" | "°">
| <#CHAR: ["a"-"z"] | ["A"-"Z"] | "à" | "è" | "é" | "ì" | "ò" | "ù">
La grammatica (notazione jj)
Problema: bisogna rappresentare degli indirizzi ip, ovvero sequenze di 4 interi compresi fra 0 e 255 separati da un
punto.
                                                                                             Non crea alcun problema al
                                                                                            riconoscitore, ma permette la
void Ip():{}{ <INT> <DOT> <INT> <DOT> <INT> <DOT> <INT> (<PORT> <INT>)?}                  definizione di un insieme di indirizzi
                                                                                            più ampio di quello accettabile




                                                                                           Così non siamo però in grado di
Si potrebbe definire un token “IPBLOCK” che validi un intero compreso fra 0 e 255         discriminare fra interi e blocchi ip, il
                                                                                             parser fa match con il primo
                                                                                          elemento che incontra, inoltre vi è
[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]
                                                                                         una sovrapposizione fra le definizioni


quindi: void Ip():{}{ <IPBLOCK> <DOT> <IPBLOCK> <DOT> <IPBLOCK> <DOT> <IPBLOCK> (<PORT> <INT>)?}
La grammatica (notazione jj)
Dal momento che si è interessati sia agli interi che al loro sottoinsieme “ipblock”, è possibile introdurre
un’espressione regolare che permetta il match di un intero indirizzo ip

< IP: "ip:" (["1"-"9"]["0"-"9"]   |   ["0"-"9"]   |   "1"["0"-"9"]["0"-"9"]   |   "2"["0"-"4"]["0"-"9"]   |   "25"["0"-"5"])"."
            (["1"-"9"]["0"-"9"]   |   ["0"-"9"]   |   "1"["0"-"9"]["0"-"9"]   |   "2"["0"-"4"]["0"-"9"]   |   "25"["0"-"5"])"."
            (["1"-"9"]["0"-"9"]   |   ["0"-"9"]   |   "1"["0"-"9"]["0"-"9"]   |   "2"["0"-"4"]["0"-"9"]   |   "25"["0"-"5"])"."
            (["1"-"9"]["0"-"9"]   |   ["0"-"9"]   |   "1"["0"-"9"]["0"-"9"]   |   "2"["0"-"4"]["0"-"9"]   |   "25"["0"-"5"]) >




e a questo punto la relativa produzione diventa:                                                     Ora il parser riconosce
                                                                                                     correttamente gli indirizzi ip e
                                                                                                     abbiamo mantenuto la capacità
void Ip():{}{ <IP> (<PORT> <INT>)?}                                                                  di rappresentare gli interi
La grammatica (produzioni)

void Scope():{}{Cmd() Cam() <EOF>}                                                             La sintassi di un generico comando ha la
                                                                                             forma: <azione> <argomento> <dispositivo>
void Cmd():{}{New()|Motion()|Backlight()|Sharpness()|Resolution()|Rotate()}

void Cam():{}{<CAM> <IDENT>}

void Make():{}{<MAKE> <IDENT>}


void New():{}{<NEW> Ip() Make()}

void Motion():{}{<MOTION> Area() (<ADD>|<REMOVE>)}

void Backlight():{}{<BACKLIGHT> <INT>}                                        Sintassi dei singoli comandi
void Sharpness():{}{<SHARPNESS> <INT>}

void Resolution():{}{<RESOLUTION> Res()}

void Rotate():{}{<ROTATE> <INT> (<LEFT>|<RIGHT>)}



void Area():{}{<INT> <DOT> <INT> <DOT> <INT> <DOT> <INT> <DOT> <INT>} //punto iniziale, punto finale, sensibilità

void Res():{}{<INT> "*" <INT>}
                                                                                               La correttezza semantica di
void Ip():{}{ <IP> (<PORT> <INT>)?}                                                             aree, indirizzi e risoluzioni
                                                                                                viene valutata a posteriori
Considerazioni sulla grammatica ottenuta


• La grammatica realizzata è di tipo “context-free” (tipo 2 secondo la classificazione di Chomsky), ma   priva di self -
  embedding, pertanto il linguaggio ottenuto è di tipo 3.



• Non è utile definire ε-rules nello scopo, un comando vuoto equivale a nessun comando.



• La grammatica appartiene alla classe LL(1), pertanto non è stato necessario inserire nel file di specifica alcuna
  istruzione di lookahead.
Architettura del sistema

Modello

Consiste di una aggregazione di istanze di oggetti che implementano la classe astratta “Camera”. Questa si occupa
di definire il comportamento di base di un dispositivo video, lasciando alle sue implementazioni il compito di
specificare le reazioni ai vari comandi specifici.
                      Si è voluto uniformare il comportamento dei vari modelli di telecamere.
Architettura del sistema

Valutazione semantica dei comandi ricevuti in input e loro attuazione

Il visitor estende il “DepthFirstVisitor” generato automaticamente ed ha il compito di costruire una
rappresentazione del comando mano a mano che procede nella valutazione della frase.




 Pattern Command

 Permette di incapsulare una richiesta, costituita dal metodo execute (logica) e dai suoi parametri (state),
 delegandone l’esecuzione ad un’entità ricevente (nel nostro caso il controller).

 ✓ si evita di fare agire il visitor direttamente sul modello
 ✓ si semplifica la gestione dei comandi
 ✓ facilita la creazione di log e rapporti
 ✓ è facile aggiungere nuovi comandi
 ✓ possibilità di rollback
Architettura del sistema
Gestione dell’interfaccia grafica ed aggiornamento delle viste

Vengono utilizzati i pattern “model-view-control” ed “observer”: tutti gli elementi grafici implementano le interfacce
InputDevice e/o OutputDevice. Il problema di notificare ad alcuni dispositivi le modifiche che vengono
effettuate sul dominio viene risolto facendo in modo che tali elementi si “registrino” in una lista di soggetti da
notificare in caso di variazioni presso il controller.
Visione d’insieme
Esempi d’uso - creazione entità
Definizione di due dispositivi
new make:Mobotix ip:62.123.180.9 camera: prova1
new make:Mobotix ip:151.38.133.10 port 2001 camera: prova2




                                                                                                         Finestra principale dell’applicazione


                                                             Visualizzazione in dettaglio di un dispositivo (click sull’anteprima)
Esempi d’uso - esecuzione comandi

Variazione della luminosità e del contrasto




backlight 30 camera: prova1

sharpness 25 camera: prova2




            http://62.123.180.9/control/control?set&section=imagecontrol&backlight=30

         http://151.38.133.10:2001/control/control?set&section=imagecontrol&sharpness=25
Esempi d’uso - procedure da file

Il sistema utilizza il parser inviandogli le frasi digitate dall’utente, ma è possibile scrivere delle procedure di comandi
su file, valutarli e applicarli in sequenza.
new make:mobotix ip:192.168.1.197 camera:casa
motion 10.10.500.500.6 add camera:casa
backlight 9 camera:casa
sharpness 2 camera:casa
resolution 640*480 camera:casa

                                                    casa ready
                                                    Address: 192.168.1.197

                                                    new motion detection area: from 10,10 to 500,500 trigger: 6
                                                    http://192.168.1.197/control/control?set&section=event&motiondef=0,10,10,500,500,a=6
                                                    set backlight to 9
                                                    http://192.168.1.197/control/control?set&section=imagecontrol&backlight=9
                                                    set sharpness to 2
                                                    http://192.168.1.197/control/control?set&section=imagecontrol&sharpen=2
                                                    set resolution to: 640 X 480
                                                    http://192.168.1.197/control/control?set&section=imagecontrol&size=640x480
Sviluppi futuri



• Realizzazione di una versione da linea di comando ed eventualmente di una libreria Java


• Implementazione di ulteriori modelli


• Ricerca di una soluzione alternativa per implementare le specifiche dei singoli dispositivi

Más contenido relacionado

Destacado

Vernieuwen en verbeteren Waterkwartier Zutphen
Vernieuwen en verbeteren Waterkwartier ZutphenVernieuwen en verbeteren Waterkwartier Zutphen
Vernieuwen en verbeteren Waterkwartier Zutphenmarcharmsen
 
The New York City Sandwich Club
The New York City Sandwich ClubThe New York City Sandwich Club
The New York City Sandwich Clubpluralisms
 
3 место Городской конкурс ИКТ (2002)
3 место Городской конкурс ИКТ (2002)3 место Городской конкурс ИКТ (2002)
3 место Городской конкурс ИКТ (2002)str47
 
AC Rondeel expo: Touwtjes In Handen
AC Rondeel expo: Touwtjes In HandenAC Rondeel expo: Touwtjes In Handen
AC Rondeel expo: Touwtjes In Handenmarcharmsen
 
Blurb presentation
Blurb presentationBlurb presentation
Blurb presentationhanz1025
 
20150314_逢甲CEO論壇
20150314_逢甲CEO論壇20150314_逢甲CEO論壇
20150314_逢甲CEO論壇Earl Chuang
 
Attika Documentatieboek 2010 03 01 Zorg Klein V7
Attika Documentatieboek 2010 03 01 Zorg Klein V7Attika Documentatieboek 2010 03 01 Zorg Klein V7
Attika Documentatieboek 2010 03 01 Zorg Klein V7marcharmsen
 
Примеры самоорганизации. DES ©.
Примеры самоорганизации. DES ©.Примеры самоорганизации. DES ©.
Примеры самоорганизации. DES ©.str47
 
Modelli per l'integrazione aziendale
Modelli per l'integrazione aziendaleModelli per l'integrazione aziendale
Modelli per l'integrazione aziendaleCarlo Zamagni
 
Les 2 Vaches partent en Grèce
Les 2 Vaches partent en GrèceLes 2 Vaches partent en Grèce
Les 2 Vaches partent en GrèceMarine SANCHEZ
 

Destacado (12)

Vernieuwen en verbeteren Waterkwartier Zutphen
Vernieuwen en verbeteren Waterkwartier ZutphenVernieuwen en verbeteren Waterkwartier Zutphen
Vernieuwen en verbeteren Waterkwartier Zutphen
 
The New York City Sandwich Club
The New York City Sandwich ClubThe New York City Sandwich Club
The New York City Sandwich Club
 
3 место Городской конкурс ИКТ (2002)
3 место Городской конкурс ИКТ (2002)3 место Городской конкурс ИКТ (2002)
3 место Городской конкурс ИКТ (2002)
 
mfupdate
mfupdatemfupdate
mfupdate
 
AC Rondeel expo: Touwtjes In Handen
AC Rondeel expo: Touwtjes In HandenAC Rondeel expo: Touwtjes In Handen
AC Rondeel expo: Touwtjes In Handen
 
Blurb presentation
Blurb presentationBlurb presentation
Blurb presentation
 
20150314_逢甲CEO論壇
20150314_逢甲CEO論壇20150314_逢甲CEO論壇
20150314_逢甲CEO論壇
 
Attika Documentatieboek 2010 03 01 Zorg Klein V7
Attika Documentatieboek 2010 03 01 Zorg Klein V7Attika Documentatieboek 2010 03 01 Zorg Klein V7
Attika Documentatieboek 2010 03 01 Zorg Klein V7
 
Примеры самоорганизации. DES ©.
Примеры самоорганизации. DES ©.Примеры самоорганизации. DES ©.
Примеры самоорганизации. DES ©.
 
Modelli per l'integrazione aziendale
Modelli per l'integrazione aziendaleModelli per l'integrazione aziendale
Modelli per l'integrazione aziendale
 
Les 2 Vaches partent en Grèce
Les 2 Vaches partent en GrèceLes 2 Vaches partent en Grèce
Les 2 Vaches partent en Grèce
 
Optimisation de la conversion
Optimisation de la conversionOptimisation de la conversion
Optimisation de la conversion
 

Similar a Camera Parser

Acadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS TodayAcadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS TodayFrancesco Sciuti
 
Presentazione SDK EPSON Moverio BT-200
Presentazione SDK EPSON Moverio BT-200Presentazione SDK EPSON Moverio BT-200
Presentazione SDK EPSON Moverio BT-200JoinPad Company
 
MOOC Piattaforme digitali per la gestione del territorio - 4.4
MOOC Piattaforme digitali per la gestione del territorio - 4.4MOOC Piattaforme digitali per la gestione del territorio - 4.4
MOOC Piattaforme digitali per la gestione del territorio - 4.4Alessandro Bogliolo
 
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoMavigex srl
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBStefano Dindo
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNetMauro Servienti
 
Esercizi in linguaggio Assembly 8086
Esercizi in linguaggio Assembly 8086Esercizi in linguaggio Assembly 8086
Esercizi in linguaggio Assembly 8086Sergio Porcu
 
Reverse Engineering per dispositivi IoT
Reverse Engineering per dispositivi IoTReverse Engineering per dispositivi IoT
Reverse Engineering per dispositivi IoTAndrea Lazzarotto
 
Lezione 3 arduino - corso 20 ore
Lezione 3 arduino - corso 20 oreLezione 3 arduino - corso 20 ore
Lezione 3 arduino - corso 20 oreMirko Mancin
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality CodeDaniele Mondello
 
Delphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev OverviewDelphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev Overviewpietrobr
 
Da e Verso Odoo - Pycon Sette 2016
Da e Verso Odoo - Pycon Sette 2016Da e Verso Odoo - Pycon Sette 2016
Da e Verso Odoo - Pycon Sette 2016OpenCode
 
Html5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo webHtml5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo webMassimo Bonanni
 
Da e verso odoo xml rpc, erppeek e python
Da e verso odoo  xml rpc, erppeek e pythonDa e verso odoo  xml rpc, erppeek e python
Da e verso odoo xml rpc, erppeek e pythonOpenCode
 
Arkanoid on Altera DE-1
Arkanoid on Altera DE-1Arkanoid on Altera DE-1
Arkanoid on Altera DE-1Matteo Gazzin
 

Similar a Camera Parser (20)

Acadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS TodayAcadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS Today
 
Presentazione SDK EPSON Moverio BT-200
Presentazione SDK EPSON Moverio BT-200Presentazione SDK EPSON Moverio BT-200
Presentazione SDK EPSON Moverio BT-200
 
Devianze
DevianzeDevianze
Devianze
 
MOOC Piattaforme digitali per la gestione del territorio - 4.4
MOOC Piattaforme digitali per la gestione del territorio - 4.4MOOC Piattaforme digitali per la gestione del territorio - 4.4
MOOC Piattaforme digitali per la gestione del territorio - 4.4
 
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimento
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet
 
Esercizi in linguaggio Assembly 8086
Esercizi in linguaggio Assembly 8086Esercizi in linguaggio Assembly 8086
Esercizi in linguaggio Assembly 8086
 
OrientDB & Big Data
OrientDB & Big DataOrientDB & Big Data
OrientDB & Big Data
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Reverse Engineering per dispositivi IoT
Reverse Engineering per dispositivi IoTReverse Engineering per dispositivi IoT
Reverse Engineering per dispositivi IoT
 
Lezione 3 arduino - corso 20 ore
Lezione 3 arduino - corso 20 oreLezione 3 arduino - corso 20 ore
Lezione 3 arduino - corso 20 ore
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Web Animation API
Web Animation APIWeb Animation API
Web Animation API
 
Delphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev OverviewDelphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev Overview
 
Da e Verso Odoo - Pycon Sette 2016
Da e Verso Odoo - Pycon Sette 2016Da e Verso Odoo - Pycon Sette 2016
Da e Verso Odoo - Pycon Sette 2016
 
Html5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo webHtml5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo web
 
Da e verso odoo xml rpc, erppeek e python
Da e verso odoo  xml rpc, erppeek e pythonDa e verso odoo  xml rpc, erppeek e python
Da e verso odoo xml rpc, erppeek e python
 
Arkanoid on Altera DE-1
Arkanoid on Altera DE-1Arkanoid on Altera DE-1
Arkanoid on Altera DE-1
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 

Camera Parser

  • 1. Camera Parser autore: Carlo Zamagni Progetto per l’esame di linguaggi e modelli computazionali LS Prof. Enrico Denti anno accademico 2006/2007
  • 2. Problematica e scopo del progetto Le telecamere IP sono controllate mediante parametri passati via HTTP a degli script CGI esempio: http://192.168.0.240/control/control? set&section=general&coverimage_area=0,540,380,200,200,2 %0A1,320,100,100,150,2 tratto dalle HTTP-API di Mobotix • leggibilità nulla • soggetti a variazioni anche all’interno di uno stesso modello da un firmware all’altro • difficilissimo gestire ambienti con dispositivi eterogenei
  • 3. Problematica e scopo del progetto Sarebbe comodo disporre di un semplice linguaggio con il quale specificare in modo “umano” dei comandi e gestirne l’invio a delle entità: ...qualcosa di simile a questo: nuova telecameraX 192.168.0.240 tipo: mobotix copertura 540 380 200 200 opacità 2 su telecameraX area sensibile 0 0 10 100 soglia 30 su telecameraX nuova telecameraY 192.168.0.2 tipo: axis risoluzione 640*480 su telecameraY
  • 4. Dominio applicativo Le informazioni che il parser dovrà trattare rappresentano dei comandi e pertanto si può individuare una “forma” comune che permetta di specificare: • il tipo di comando: verranno inseriti i comandi basilari per l’impostazione di una telecamera quali le regolazioni di luminosità, contrasto, risoluzione; per il rilevamento del movimento e la rotazione del dispositivo. • il destinatario dell’informazione: un dispositivo già specificato nell’ambiente che si andrà a creare. Sarebbe opportuno che anche la definizione di nuove entità potesse essere espressa dal linguaggio. • l’argomento del comando selezionato dall’utente: tipicamente un intero oppure una serie di valori interi. • eventuali parametri aggiuntivi.
  • 6. La grammatica (notazione jj) Scopo della grammatica: la definizione di un generico comando Altri token < CAM: "camera:" > void Scope():{}{Cmd() Cam() <EOF>} | < DOT: "." > | < MAKE: "make:" > | < NEW: "new" > | < MOTION: "motion" > | < BACKLIGHT: "backlight" > | < SHARPNESS: "sharpness" > | < RESOLUTION: "resolution" > | < ROTATE: "rotate" > | < LEFT: "left" > Valori interi ed identificatori: | < RIGHT: "right" > | < PORT: "port" > < INT: ["0"-"9"] (["0"-"9"])* > | < ADD: "add" > | < REMOVE: "remove" > < IDENT: (<CHAR> | ["0"-"9"] | <SYMBOL>)+> | <#SYMBOL: "_" | "$" | "%" | "-" | "^" | "#" | "&" | "," | ";" | "°"> | <#CHAR: ["a"-"z"] | ["A"-"Z"] | "à" | "è" | "é" | "ì" | "ò" | "ù">
  • 7. La grammatica (notazione jj) Problema: bisogna rappresentare degli indirizzi ip, ovvero sequenze di 4 interi compresi fra 0 e 255 separati da un punto. Non crea alcun problema al riconoscitore, ma permette la void Ip():{}{ <INT> <DOT> <INT> <DOT> <INT> <DOT> <INT> (<PORT> <INT>)?} definizione di un insieme di indirizzi più ampio di quello accettabile Così non siamo però in grado di Si potrebbe definire un token “IPBLOCK” che validi un intero compreso fra 0 e 255 discriminare fra interi e blocchi ip, il parser fa match con il primo elemento che incontra, inoltre vi è [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5] una sovrapposizione fra le definizioni quindi: void Ip():{}{ <IPBLOCK> <DOT> <IPBLOCK> <DOT> <IPBLOCK> <DOT> <IPBLOCK> (<PORT> <INT>)?}
  • 8. La grammatica (notazione jj) Dal momento che si è interessati sia agli interi che al loro sottoinsieme “ipblock”, è possibile introdurre un’espressione regolare che permetta il match di un intero indirizzo ip < IP: "ip:" (["1"-"9"]["0"-"9"] | ["0"-"9"] | "1"["0"-"9"]["0"-"9"] | "2"["0"-"4"]["0"-"9"] | "25"["0"-"5"])"." (["1"-"9"]["0"-"9"] | ["0"-"9"] | "1"["0"-"9"]["0"-"9"] | "2"["0"-"4"]["0"-"9"] | "25"["0"-"5"])"." (["1"-"9"]["0"-"9"] | ["0"-"9"] | "1"["0"-"9"]["0"-"9"] | "2"["0"-"4"]["0"-"9"] | "25"["0"-"5"])"." (["1"-"9"]["0"-"9"] | ["0"-"9"] | "1"["0"-"9"]["0"-"9"] | "2"["0"-"4"]["0"-"9"] | "25"["0"-"5"]) > e a questo punto la relativa produzione diventa: Ora il parser riconosce correttamente gli indirizzi ip e abbiamo mantenuto la capacità void Ip():{}{ <IP> (<PORT> <INT>)?} di rappresentare gli interi
  • 9. La grammatica (produzioni) void Scope():{}{Cmd() Cam() <EOF>} La sintassi di un generico comando ha la forma: <azione> <argomento> <dispositivo> void Cmd():{}{New()|Motion()|Backlight()|Sharpness()|Resolution()|Rotate()} void Cam():{}{<CAM> <IDENT>} void Make():{}{<MAKE> <IDENT>} void New():{}{<NEW> Ip() Make()} void Motion():{}{<MOTION> Area() (<ADD>|<REMOVE>)} void Backlight():{}{<BACKLIGHT> <INT>} Sintassi dei singoli comandi void Sharpness():{}{<SHARPNESS> <INT>} void Resolution():{}{<RESOLUTION> Res()} void Rotate():{}{<ROTATE> <INT> (<LEFT>|<RIGHT>)} void Area():{}{<INT> <DOT> <INT> <DOT> <INT> <DOT> <INT> <DOT> <INT>} //punto iniziale, punto finale, sensibilità void Res():{}{<INT> "*" <INT>} La correttezza semantica di void Ip():{}{ <IP> (<PORT> <INT>)?} aree, indirizzi e risoluzioni viene valutata a posteriori
  • 10. Considerazioni sulla grammatica ottenuta • La grammatica realizzata è di tipo “context-free” (tipo 2 secondo la classificazione di Chomsky), ma priva di self - embedding, pertanto il linguaggio ottenuto è di tipo 3. • Non è utile definire ε-rules nello scopo, un comando vuoto equivale a nessun comando. • La grammatica appartiene alla classe LL(1), pertanto non è stato necessario inserire nel file di specifica alcuna istruzione di lookahead.
  • 11. Architettura del sistema Modello Consiste di una aggregazione di istanze di oggetti che implementano la classe astratta “Camera”. Questa si occupa di definire il comportamento di base di un dispositivo video, lasciando alle sue implementazioni il compito di specificare le reazioni ai vari comandi specifici. Si è voluto uniformare il comportamento dei vari modelli di telecamere.
  • 12. Architettura del sistema Valutazione semantica dei comandi ricevuti in input e loro attuazione Il visitor estende il “DepthFirstVisitor” generato automaticamente ed ha il compito di costruire una rappresentazione del comando mano a mano che procede nella valutazione della frase. Pattern Command Permette di incapsulare una richiesta, costituita dal metodo execute (logica) e dai suoi parametri (state), delegandone l’esecuzione ad un’entità ricevente (nel nostro caso il controller). ✓ si evita di fare agire il visitor direttamente sul modello ✓ si semplifica la gestione dei comandi ✓ facilita la creazione di log e rapporti ✓ è facile aggiungere nuovi comandi ✓ possibilità di rollback
  • 13. Architettura del sistema Gestione dell’interfaccia grafica ed aggiornamento delle viste Vengono utilizzati i pattern “model-view-control” ed “observer”: tutti gli elementi grafici implementano le interfacce InputDevice e/o OutputDevice. Il problema di notificare ad alcuni dispositivi le modifiche che vengono effettuate sul dominio viene risolto facendo in modo che tali elementi si “registrino” in una lista di soggetti da notificare in caso di variazioni presso il controller.
  • 15. Esempi d’uso - creazione entità Definizione di due dispositivi new make:Mobotix ip:62.123.180.9 camera: prova1 new make:Mobotix ip:151.38.133.10 port 2001 camera: prova2 Finestra principale dell’applicazione Visualizzazione in dettaglio di un dispositivo (click sull’anteprima)
  • 16. Esempi d’uso - esecuzione comandi Variazione della luminosità e del contrasto backlight 30 camera: prova1 sharpness 25 camera: prova2 http://62.123.180.9/control/control?set&section=imagecontrol&backlight=30 http://151.38.133.10:2001/control/control?set&section=imagecontrol&sharpness=25
  • 17. Esempi d’uso - procedure da file Il sistema utilizza il parser inviandogli le frasi digitate dall’utente, ma è possibile scrivere delle procedure di comandi su file, valutarli e applicarli in sequenza. new make:mobotix ip:192.168.1.197 camera:casa motion 10.10.500.500.6 add camera:casa backlight 9 camera:casa sharpness 2 camera:casa resolution 640*480 camera:casa casa ready Address: 192.168.1.197 new motion detection area: from 10,10 to 500,500 trigger: 6 http://192.168.1.197/control/control?set&section=event&motiondef=0,10,10,500,500,a=6 set backlight to 9 http://192.168.1.197/control/control?set&section=imagecontrol&backlight=9 set sharpness to 2 http://192.168.1.197/control/control?set&section=imagecontrol&sharpen=2 set resolution to: 640 X 480 http://192.168.1.197/control/control?set&section=imagecontrol&size=640x480
  • 18. Sviluppi futuri • Realizzazione di una versione da linea di comando ed eventualmente di una libreria Java • Implementazione di ulteriori modelli • Ricerca di una soluzione alternativa per implementare le specifiche dei singoli dispositivi