1 / 24

Manager League Linguaggio per la simulazione di una partita di calcio Fabrizio Rovatti

Manager League Linguaggio per la simulazione di una partita di calcio Fabrizio Rovatti Linguaggi e modelli computazionali LS. Obiettivi generali del progetto. Sviluppare un linguaggio che permetta di simulare una partita di calcio attraverso una sequenza di azioni

Download Presentation

Manager League Linguaggio per la simulazione di una partita di calcio Fabrizio Rovatti

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Manager League Linguaggio per la simulazione di una partita di calcio Fabrizio Rovatti Linguaggi e modelli computazionali LS

  2. Obiettivi generali del progetto • Sviluppare un linguaggio che permetta di simulare una partita di calcio attraverso una sequenza di azioni • Visualizzare la sintesi testuale della partita e le statistiche dei singoli giocatori e delle 2 squadre • Visualizzare le posizioni dei tiri effettuati dalle 2 squadre durante la partita

  3. Strumenti utilizzati • JavaCC: generatore di parser top-down per grammatiche LL(k) • Java Tree Builder (JBT): strumento aggiuntivo a JavaCC per la generazione automatica delle classi necessarie a creare l’albero sintattico (AST) • NetBeans 5.5: ambiente di sviluppo multi linguaggio • Java 1.6: linguaggio di programmazione

  4. Grammatica • La grammatica é studiata per poter definire prima le strutture dello stadio, seguite dalle informazioni relative alle 2 squadre per finire con le azioni che simuleranno il match • Di seguito, la definizione della grammatica in notazione EBNF G = < VT, VN, P, S >

  5. Esempio della Grammatica stadio san siro tabellone Manuale negozio Piccolo ristorante Pub illuminazione Fari Semplici riscaldamento Manto Riscaldato capienza 20000 spettatori 10000 Milan sponsor Puma modulo(3-4-3) titolari 1 Dida Por 2 Maldini Dif 3 Nesta Dif 4 KaladzeDif 5 Pirlo Cen 6 Gattuso Cen 7 AmbrosiniCen 8 SeedorfCen 9 Gilardino Att 10 Ronaldo Att 11 KakaAtt panchina 12 Kalac Por 13 OddoDif 14 BoneraDif 15 Brocchi Cen 16 Inzaghi Att 17 PatoAtt cambio 2 - 13 34 cambio 3 -14 74 Inter sponsor Puma modulo(3-4-3) titolari 1 Julio Cesar Por 2 MaterazziDif 3 Cordoba Dif 4 ZanettiDif 5 StankovicCen 6 Vieira Cen 7 FigoCen 8 jimenezCen 9 Adriano Att 10 IbraimovicAtt 11 Cruz Att panchina 12 Toldo Por 13 Samuel Dif 14 DacourtCen 15 JimenezCen 16 Crespo Att 17 SuazoAtt cambio 2 - 13 56 cambio 13 - 15 89 Kaka 10 tiro (10,10) Parata Materazzi 11 fallo Rosso Pirlo punizione(1,1) Parata Cordoba 12 fallo Giallo Kaka rigore Gol Figo 13 passa(Adriano13 passa(Vieira13 passa(Adriano 15 tiro(1,1) Gol))) Pirlo 16 corner Gilardino Fuori Strutture Stadio Squadra di casa Azioni Squadra ospite

  6. Grammatica • Lo scopo della grammatica: S ::= <Introduzione> <Partita> Nella prima parte vengono inserite le informazioni riguardanti lo stadio e le 2 squadre nella seconda invece le azioni della partita <Introduzione> ::= <Stadio> <Squadre> <Stadio> ::= stadio<Nome> <Strutture> <Spettatori> Le informazioni dello stadio sono: • Nome • Strutture ( Tabellone, Negozio, Ristorante, Illuminazione, Riscaldamento, Capienza) • Spettatori

  7. Grammatica (Stadio) <Nome> ::= <PAROLA> (<PAROLA>)* <Strutture> ::= <Tabellone> <Negozio> <Ristorante> <Illuminazione> <Riscaldamento> <Capienza> <Tabellone> ::= tabellone<TABELLONE> <Negozio> ::= negozio<NEGOZIO> <Ristorante> ::= ristorante<RISTORANTE> <Illuminazione> ::= illuminazione<ILLUMINAZIONE> <Riscaldamento> ::= riscaldamento<RISCALDAMENTO> <Capienza> ::= capienza<NUMERO> <Spettatori> ::= spettatori<NUMERO>

  8. Grammatica (Squadra) <Squadre> ::= <Squadra> <Squadra> <Squadra> ::= <Nome> <Sponsor> <Modulo> <Titolari> <Panchina> (<Sostituzione>)* Per ogni squadra possono essere inserite 0 o più sostituzioni ( possono poi essere annullate dalle successive azioni, controllo semantico) <Sponsor> ::= sponsor<SPONSOR> <Modulo> ::= modulo(<NUMERO> -<NUMERO> -<NUMERO>) Il modulo si riferisce a: • difensori • centrocampisti • attaccanti

  9. Grammatica (Squadra) <Titolari> ::= titolari (<Giocatore>)* <Panchina> ::= panchina (<Giocatore>)* Sia per i titolari che per la panchina i giocatori potrebbero essere 0 o + ( per il numero giusto di giocatori viene effettuato un controllo semantico) <Giocatore> ::= <NUMERO> <Nome> <POSIZIONE> Ogni giocatore è definito da: • Numero di Maglia • Nome • Posizione ( Portiere, Difensore, Centrocampista, Attaccante ) <Sostituzione> ::= cambio<NUMERO> -<NUMERO> <Minuto> Le sostituzioni vengono eseguite attraverso i numeri di maglia dei giocatori <Minuto> ::= <NUMERO>

  10. Grammatica (Partita) <Partita> ::= (<Azione>)+ La partita deve contenere 1 o + azioni <Azione> ::= <Nome> <Minuto> ( <Tiro> | <Fallo> | <Passaggio> | <Corner> ) Per ogni azione è definito il minuto, il giocatore che l’ha effettuata e il tipo: • Tiro • Fallo • Passaggio • Corner

  11. Grammatica (Azioni) <Tiro> ::= tiro<Posizione> <Conclusione> <Posizione> ::= (<NUMERO>-<NUMERO>) La posizione del tiro è definita da una coppia di valori (x,y) che partono dall’angolo in alto a sinistra del campo da gioco ( il valore della x è limitato alla metà del campo da gioco) <Conclusione> ::= <CONCLUSIONE> <Fallo> ::= fallo [<Cartellino>] <Nome> (<Punizione> | <Rigore>) Il giocatore che ha commesso il fallo può essere punito con il cartellino. Il <Nome> corrisponde al giocatore che batte la punizione o il rigore <Cartellino> ::= <CARTELLINO>

  12. Grammatica (Azioni) <Punizione> ::= punizione <Posizione> <Conclusione> <Rigore> ::= rigore <Conclusione> Il rigore non ha posizione in quanto è ovviamente fissa <Corner> ::= corner<Nome> <Conclusione> Il <Nome> corrisponde al giocatore che riceve il corner <Passaggio> ::= passa(<Azione>) Dopo un passaggio inizia una nuova azione

  13. Grammatica (Token) I Token sono le parole chiave presenti nel linguaggio <SPONSOR> ::= Puma | Adidas | Lotto | Nike <POSIZIONE> ::= Por | Dif | Cen | Att <TABELLONE> ::= Manuale | Digitale | MaxiSchermo | Plasma <NEGOZIO> ::= Piccolo | Medio | Grande <ILLUMINAZIONE> ::= Fari Semplici | Luce Solare <RISTORANTE> ::= Pub | Ristorante <RISCALDAMENTO> ::= Manto Riscaldato | Stadio Coperto <CARTELLINO> ::= Giallo | Rosso <CONCLUSIONE> ::= Gol | Parata | Fuori <NUMERO> ::= [0-9] ( [0-9] )* <PAROLA> ::= ( [a-z] | [A-Z] | _ )( [a-z] | [A-Z] | _)*

  14. Osservazioni sulla grammatica Introduce una ricorsione in cui si aggiungono contemporaneamente simboli a sinistra e a destra, garantendo di proseguire di pari passo • Il linguaggio generato dalla grammatica proposta risulta essere di tipo 2, secondo la classificazione di Chomsky, a causa della presenza del self-embedding nella regola <Azione> ::= <Nome> <Minuto> ( <Tiro> | <Fallo> | <Passaggio> | <Corner> ) <Passaggio> :: = passa (<Azione>) • La grammatica risulta essere di tipo 2 (context-free) avendo tutte le regole nella forma A  α con αε ( VT Ụ VN)* , A εVN • Il riconoscitore può essere realizzato con un Push – Down Automaton (PDA)

  15. Osservazioni sulla grammatica • La stringa vuotapotrebbe essere introdotta a livello dello scopo senza alterare la grammatica, ma questo non avrebbe senso (non viene simulata nessuna partita) • La grammatica è LL(1) • Utilizza al più 1 simbolo per riconoscere con certezza la produzione da scegliere • Starter symbols disgiunti • Riconoscitore sarà un PDA-Deterministico • Analisi ricorsiva discendente(top-down) • Automa Stati Finiti (ASF) + Stack

  16. Architettura del sistema Il parser infine genera l’albero sintattico astratto (AST), eliminando dall’albero di derivazione i nodi non indispensabili Grazie a JavaCC le classi necessarie per la costruzione dell’albero sono create in maniera automatica ( package sintaxtree) Effettua l’analisi sintattica, data la sequenza di token prodotta dallo scanner verifica che sia conforme alla grammatica Effettua l’analisisemantica, controlla la coerenza logica del testo Grazie a JavaCC è creato in maniera automatica l’analizzatore sintattico, per l’analisi semantica sono stati aggiunti una serie di controlli ( ParserPartita ) Effettua l’analisi lessicale, individua le singole parole ( token ) che compongono la frase. Data una frase espressa da una sequenza di caratteri, restituisce la sequenza ordinata di nomi, parole chiave, etc. che compaiono in quella frase Grazie a JavaCC è creato in maniera automatica ( ParserPartitaTokenManager ) TEXT AST SCANNER PARSER Sull’albero sintattico astratto vengono poi applicati i visitor, che sono le funzioni di interpretazione delle frasi del linguaggio

  17. Parser • Implementato nell’oggettoParserPartita • Utilizzato come Singleton • Crea l’APT • Analisi sintattica • Analisisemantica • Effettua una serie di controlli per quanto riguarda le squadre, i giocatori e le azioni • Crea e utilizza l’oggetto ControlloDati

  18. Inserendo del codice java all’interno del file .jj (JavaCC) nel quale viene definita la grammatica del linguaggio Semantica • Parte del controllo semantico è effettuato direttamente dal Parser, i controlli più complicato sono invece eseguiti dall’oggetto ControlloDati • I controlli effettuati direttamente dal Parser sono: • Numero di spettatori ( minore della capienza dello stadio ) • Numero massimo di sostituzioni ( 3 ) • Modulo • Numero di giocatori in campo (11 ) e in panchina ( 6 ) • Numero di maglia dei giocatori ( 1-99 ) • Sostituzione ( stesso giocatore ) • Minuti dei cambi e delle azioni ( 1-90 , ed incrementali ) • Posizione del tiro

  19. Semantica (ControlloDati) • In questa classe vengono effettuati tutti i controlli semantici più complicati, sia per quanto riguarda le squadre sia per quanto riguarda i giocatori che eseguono le azioni • Controlli sulla squadra: • Numeri di maglia e nomi dei giocatori tutti diversi • Giocatori in campo all’inizio della partita corrispondono al modulo inserito • Correttezza delle sostituzioni • Controlli sulle azioni: • Il giocatore che compie l’azione deve essere in quel momento in campo • Annullare eventuali sostituzioni se coinvolgono un giocatore espulso

  20. Abtract Syntax Tree (AST) • Generato automaticamente dal Parser • Viene creata una classe per ogni produzione della grammatica ( package sintaxtree ) • Le classi sono generate in maniera automatica da JTB • Uniforma la modalità di accesso per il visitor facendo implementare a ognuna delle classi l’interfacciaNode ( metodi accept( ) )

  21. Visitor • Visita ricorsivamente l’albero generato dal parser attraverso il meccanismo DoubleDispatch • ogni oggetto accetta la visita del visitor attraverso il metodo accept, al suo interno rimpalla l’azione di visita al visitor passando se stesso come oggetto da visitare • La logica della valutazione è contenuta in un solo oggetto • si hanno tante classi visitor quante sono le funzioni di valutazione desiderate • Implementano l’interfaccia Visitor • Sono stati implementati 4 Visitor: • TreeVisitor • XmlVisitor • StatisticheVisitor • AzioniVisitor

  22. Visitor • TreeVisitor: rappresenta graficamente l’AST generato dal Parser • XmlVisitor: esporta la partita simulata su un file in formato XML • StatisticheVisitor: salva le statistiche dei singoli giocatori e delle 2 squadre • AzioniVisitor: salva la successione delle azioni e delle sostituzioni • Gli ultimi 2 Visitor servono per creare il file Html che rappresenta la simulazione della partita (stadio, azioni, statistiche)

  23. Applicazione (package) • Package applicazione • contiene le classi per la grafica dell’applicazione • Package parserPartita • contiene parser e scanner • Package semantica • contiene le classi necessarie per l’analisi semantica • Package sintaxtree • contiene le classi necessarie per la costruzione dell’AST • Package statistichePartita • contiene le classi necessarie per memorizzare le statistiche della partita • Package visitor • contiene l’interfaccia e le classi dei visitor • Package util • contiene le classi necessarie per il filtraggio dei file • Package azioniPartita • contiene le classi che rappresentano le varie tipologie di azioni • classe astratta AzionePartita, le altre azioni estendono questa classe

  24. Sviluppi futuri • Possibilità che una partita possa proseguire con i supplementari o i rigori • Aggiungere un controllo sul risultato della partita • Possibilità di aumentare il numero di azioni possibili ( fallo laterale, rimessa dal fondo, etc.) • Possibilità di attribuire ad ogni giocatore una serie di parametri che ne indichino la qualità • Possibilità di creare in maniera automatica la simulazione di una partita attraverso l’appoggio a un DataBase • Possibilità attraverso una finestra grafica di scegliere i giocatori della rosa da inserire in campo, panchina o tribuna e le possibili sostituzioni • Possibilità di creare un vero e proprio campionato • Far evolvere le strutture dello stadio, acquistare giocatori

More Related