270 likes | 494 Views
S. E. WIMMING. VENT. Generator. Linguaggi e Modelli Computazionali M Prof. Enrico Denti. Realizzato da Isabella Gottardi. Obiettivi del progetto. Si vuole progettare un sistema che permetta di generare eventi natatori. Dovremo quindi:. Struttura degli eventi.
E N D
S E WIMMING VENT Generator Linguaggi e Modelli Computazionali M Prof. Enrico Denti Realizzato da Isabella Gottardi
Obiettivi del progetto • Si vuole progettare un sistema che permetta di generare eventi natatori. • Dovremo quindi:
Struttura degli eventi • Ogni evento è costituito da • Informazioni sull’evento stesso • Giuria • Cronometristi • Altro personale • Programmadell’evento • Elenco di partenza degli atleti • Note eventuali Organizzatore, luogo, data di inizio e di fine, data termine iscrizioni, ecc
Struttura degli eventi • Ogni evento è costituito da • Informazioni sull’evento stesso • Giuria • Cronometristi • Altro personale • Programmadell’evento • Elenco di partenza degli atleti • Note eventuali Giudici di partenza, addetti ai concorrenti, alle false partenze e virate, ecc…
Struttura degli eventi • Ogni evento è costituito da • Informazioni sull’evento stesso • Giuria • Cronometristi • Altro personale • Programmadell’evento • Elenco di partenza degli atleti • Note eventuali Società dei cronometristi, tipo di cronometraggio, ecc.
Struttura degli eventi • Ogni evento è costituito da • Informazioni sull’evento stesso • Giuria • Cronometristi • Altro personale • Programmadell’evento • Elenco di partenza degli atleti • Note eventuali Speaker, medico, dirigente della società ospitante, ecc.
Struttura degli eventi • Ogni evento è costituito da • Informazioni sull’evento stesso • Giuria • Cronometristi • Altro personale • Programmadell’evento • Elenco di partenza degli atleti • Note eventuali Tutte le gare in programma. Ciascuna prevede nome, data e ora, categoria atleti, ecc…
Struttura degli eventi • Ogni evento è costituito da • Informazioni sull’evento stesso • Giuria • Cronometristi • Altro personale • Programmadell’evento • Elenco di partenza degli atleti • Note eventuali Startlist degli atleti iscritti alle gare
Struttura degli eventi • Ogni evento è costituito da • Informazioni sull’evento stesso • Giuria • Cronometristi • Altro personale • Programmadell’evento • Elenco di partenza degli atleti • Note eventuali Note
Grammatica B.N.F GrammarScope : <EVENT> <A_GR> InfocompetitionJurycronootherProgramcompStartlistNote <C_GR> Scopo della Grammatica EVENT = 'event'; INFOEVENT='infoevent'; NAMEEVENT='nameevent'; CATEGORY='cat'; ORGANIZ='org'; LOCATION='loc'; TYPE='type'; … TOKEN INT : DIGIT+; FLOAT :DIGIT+ '.' DIGIT+; DATE :DIGIT DIGIT '/' DIGIT DIGIT '/' (DIGIT DIGIT | DIGITDIGITDIGITDIGIT); HOUR : DIGIT DIGIT ':' DIGIT DIGIT; STRING : '"' ( ESC_SEQ | ~('\\'|'"') )* '“’; WS : ( ‘ ‘ | ‘\t’ | ‘\r‘ | ‘\n‘ ) {$channel=HIDDEN;}; …
Grammatica B.N.F GrammarScope : <EVENT> <A_GR> InfocompetitionJurycronootherProgramcompStartlistNote <C_GR> Informazioni dell’evento <INFOEVENT> <A_GR> nameevent category organiz location type start end enddatereg poolbase limittimereg lanes <C_GR> infoevent{ nameevent : "Memorial Elena Lago" cat : Agonisti org : "Centro Nuoto Tezze ASD" loc : "Tezze sul Brenta" type : "Evento ufficiale organizzato da Società afferente al C.R.V." start : 06/11/2011 end : 06/11/2011 endreg : 04/11/2011 poolbase : 25 m limittime : "No" lanes : 6 } Propaganda Agonisti Master
Grammatica B.N.F GrammarScope : <EVENT> <A_GR> InfocompetitionJurycronootherProgramcompStartlistNote <C_GR> Giuria Cronometristi <JURY> <A_GR> referee (coadjuctor)* depjudge (falsestartempl)* compempl <C_GR> jury{ referee : "Andrea Pozzato" coadjutor : "Sandra Pavanello" depjudge : “Marco Tolomei" fsemployee : "Milena Chiarello" competemployee: "Barbara Tolomei" } • <TIMING> • <A_GR> • cronotype • cronoserv • cronosoc • <C_GR> other{ speaker: "Roberto Magnagnini" doctor: "Leonardo Valenti" manager: "Antonio Baldetti" } • <OTHER> • <A_GR> • speak • doct • mang • <C_GR> timing{ cronotype : "Manuale" cronoserv : "" cronosociety : "G.u.g Veneto" }
Grammatica B.N.F GrammarScope : <EVENT> <A_GR> InfocompetitionJurycronootherProgramcompStartlistNote <C_GR> Programma dell’evento program { date : 15/09/09 { [ hour : 12:00 category : Senior speciality : "50 rana" turn : heats ] [ hour : 12:15 category : Senior speciality : “100 stile" turn : heats ] } } • <PROG> • <A_GR> • (<datecomp> • <A_GR> • ( • <A_Q> • hourcomp • categorycomp • speccomp • turncomp • <C_Q> • )+ • <C_GR >)+ • <C_GR> Esordienti A, Ragazzi, Juniores, Master25, Master30, ecc… Serie, Semifinale, Finale
Grammatica B.N.F GrammarScope : <EVENT> <A_GR> InfocompetitionJurycronootherProgramcompStartlistNote <C_GR> • <STARTLIST> • <A_GR> • ( <COMPNAME> • <A_GR> • (nameturn • <A_GR> • (<A_Q> • LANE • acode • aname • asurname • asoc • abirth • atimereg • atimeres • <C_Q>)+ • <C_GR>)+ • <C_GR>)+ • <C_GR> StartList • startlist • { • compname : "50 rana" • { • heats 1 • { • [ • lane : 1 • acode :"VEN-000000" • aname : “Isabella" • asurname :“Gottardi" • asociety: “Adria Nuoto" • abirthday : 23/06/1987 • atimereg: 00:00:30:80 • atimeres: 00:00:00:00 • ] • } • } Nel formato “AAA-000000”
Considerazioni sulla grammatica (1/2) • Secondo la classificazione di Chomsky le grammatiche di tipo 2 (context free) presentano le produzioni vincolate alla forma: • … ma non sono presenti produzioni con self-embedding • … quindi il linguaggio è regolare Tipo 2 A → α con α є (VT U VN)* ed A є VN A → α1 A α2 con A є VN e α1, α2 є (VN U VT)+ Tipo 3
Diagramma delle classi - Package • Contiene tutte le classi che estendono Exceptions che gestiscono le eccezioni sintattiche e semantiche • Contiene tutte le classi Lexer e Parser generate automaticamente da Antlr • Contiene tutte le classi necessarie per la costruzione dell’interfaccia grafica
Diagramma delle classi • Antlr 3.0 non implementa il pattern Visitor per la valutazione dell’AST, è quindi necessario estendere la classe CommonTree e creare tutti i nodi necessari… (qui ne sono riportati solo alcuni)
Diagramma delle classi -Visitor • Sono stati implementati due visitor, avendo così la possibilità di avere due viste differenti • HTML Visitor, produce una pagina HTML dell’evento natatorio • Tree Visitor, produce a video un albero della frase analizzata
Verifica semantica • Errori lessicali e sintattici vengono rilevati direttamente da Lexer e da Parser tramite l’eccezione ErrorNodeException qualora venga inserito un nodo errore nell’AST, sono visualizzate a video all’utente mediante un messaggio nella console. • Errori semantici gestiti: • Codice atleta errato, previsto nel formato • “VEN-000000” • Tempo di iscrizione e tempo risultato dell’atleta sbagliati • Numero di corsia superiore al numero di corsie dell’impianto Orario immesso sbagliato
Funzionamento del sistema (1/2) AST SintaxError
Funzionamento del sistema (2/2) AST HTML Visitor TreeViisitor
Limiti e sviluppi futuri • Per il momento è possibile creare eventi solo per categorie italiane • Si può prevedere di leggere esternamente oppure far introdurre all’avvio dall’utente le categorie che devono essere considerate valide • Creare nuovi output • Estendere il sistema introducendo la possibilità di creare file pdf del solo programma o della sola startlist per favorire la distribuzione ai tecnici
Struttura dell’interfaccia grafica Comandi Editor Apre un Wizard per la costruzione semplificata di un’evento Console Editor help
Demo Vai alla demo