1 / 14

FantaManager

FantaManager. Linguaggio per descrivere e visualizzare graficamente una squadra di calcio. Prospero Rossini Linguaggi e modelli computazionali LS. Obiettivi del Progetto. Si vuole realizzare un sistema che permetta di:. ?. Definizione della Grammatica.

rhona
Download Presentation

FantaManager

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. FantaManager Linguaggio per descrivere e visualizzare graficamente una squadra di calcio. Prospero Rossini Linguaggi e modelli computazionali LS

  2. Obiettivi del Progetto Si vuole realizzare un sistema che permetta di: ?

  3. Definizione della Grammatica • In questo caso vogliamo definire una serie di informazioni riferite ad una squadra di calcio, in particolare: Di seguito, la definizione della grammatica in notazione BNF G = <VT,VN,P, S >

  4. Grammatica (1/3) S ::= Formazione <EOF> Formazione::= <NOME_SQUADRA> NomeSquadra Team NomeSquadra ::= <NOME> Team ::= <SCHEMA> Schema Tabellino | Tabellino Schema ::= <DIFESA> Difesa Tabellino ::= <FORMAZIONE> ElencoTitolari( Riserve )? Riserve ::= <RISERVE> ElencoRiserve Difesa ::= ( Difesa_5 <T> <CENTROCAMPO> Modulo_D5 | Difesa_4 <T> <CENTROCAMPO> Modulo_D4 | Difesa_3 <T> <CENTROCAMPO> Modulo_D3 ) Modulo_D3 ::= ( Modulo_D3_C5_A2 | Modulo_D3_C4_A3 ) Modulo_D3_C5_A2 ::= Centrocampo_5 <T> <ATTACCO> Attacco_2 Modulo_D3_C4_A3 ::= Centrocampo_4 <T> <ATTACCO> Attacco_3 Scopo Formazione NomeSquadra Team Schema “TEAM ” è composto da <SCHEMA> “SCHEMA” e “TABELLINO” oppure solo da “TABELLINO” Tabellino “TABELLINO ” è composto da <FORMAZIONE> “ELENCOTITOLARI” e d eventualmente da “RISERVE” Schema

  5. Grammatica (2/3) Modulo_D4 ::= ( Modulo_D4_C5_A1 | Modulo_D4_C4_A2 | Modulo_D4_C3_A3 ) Modulo_D4_C5_A1 ::= Centrocampo_5 <T> <ATTACCO> Attacco_1 Modulo_D4_C4_A2 ::= Centrocampo_4 <T> <ATTACCO> Attacco_2 Modulo_D4_C3_A3 ::= Centrocampo_3 <T> <ATTACCO> Attacco_3 Modulo_D5 ::= ( Modulo_D5_C4_A1 | Modulo_D5_C3_A2 ) Modulo_D5_C4_A1 ::= Centrocampo_4 <T> <ATTACCO> Attacco_1 Modulo_D5_C3_A2 ::= Centrocampo_3 <T> <ATTACCO> Attacco_2 ElencoTitolari ::= Nome (<COMMA> Nome )* ElencoRiserve ::= Nome (<COMMA> Nome )* Nome ::= <NOME> ( Secondo_Nome )* Secondo_Nome ::= <NOME> Schema Tabellino ::= <TABELLINO> ElencoTitolari (Riserve)? Riserve ::= <RISERVE> ElencoRiserve Nome

  6. Grammatica (3/3) Difesa_3 ::= <TRE> Difesa_4 ::= <QUATTRO> Difesa_5 ::= <CINQUE> Centrocampo_3 ::= <TRE> Centrocampo_4 ::= <QUATTRO> Centrocampo_5 ::= <CINQUE> Attacco_1 ::= <UNO> Attacco_2 ::= <DUE> Attacco_3 ::= <TRE> TOKENS SKIP : { " " | "\t" | "\n" | "\r" | "\f“ } TOKEN: { <NOME_SQUADRA: "[nome squadra]"> | <SCHEMA: "[schema]"> | <DIFESA: "D:"> | <CENTROCAMPO: "C:"> | <ATTACCO: "A:"> | <FORMAZIONE: "[formazione]"> | <RISERVE: "[riserve]"> | <T: “-”> | <COMMA: “,”> | <NOME: ["a"-"z"](["a"-"z"])*("è”)*(“è”)*(“ù”)*(“ù”)*(“ò”)* (“ ’ ”)*(“à”)*([“a”-“z”])*([“-”])*([“a”-“z"])*(“è”)* (“è”)*(“ù”)*(“ò”) *(“à”)*(“ù”)*(“ ‘ ”)([“a”-“z”])* ([“0”-“9”])*> }

  7. Analisi della Grammatica(1/2) • Secondo la classificazione di Chomsky la grammatica è di TIPO 2 (Context-Free) in quanto le produzioni hanno tutte la forma • A→α , conα є (VT U VN)* ed A є VN TIPO 0 TIPO 1 GRAMMATICHE TIPO 2 • …tuttavia, non presenta Self-Embedding. • Non esiste nessun simbolo non terminale A tale che: A =>* α1A α2, con α1, α2є V+ ed A є VN TIPO 3 • Teorema • Una Grammatica Context-Free (Tipo 2) che non contenga Self-Embedding genera un Linguaggio Regolare. LINGUAGGI

  8. Analisi della Grammatica(2/2) • La grammatica è LL(1)? Per le grammatiche di TIPO 2, l’automa riconoscitore è un PDA (Push Down Automaton => ASF + Stack) che utilizza l’analisi ricorsiva discendente (analisi TOP-DOWN) GRAMMATICHE LL(k) La classe di Grammaiche LL(K) è caratterizzata dalla possibilità di analizzare le frasi Left-To-Right applicando la Left-MostDerivation, utilizzando al più k simboli della frase per scegliere con certezza la produzione opportuna per la riscrittura • Condizione necessaria e sufficiente perché una Grammatica Context-Free sia LL(1) è che per ogni metasimbolo che appare nella parte sinistra di più produzioni, i DIRECTOR-SYMBOLS (DS) relativi a produzioni alternative siano disgiunti Ogni metasimbolo che appare nella parte più a sinistra di più produzioni, ha gli Starter Symbols corrispondenti alle parti destre di queste produzioni alternative, disgiunti. • …tuttavia, sappiamo che: • SS(α) seα non genera mai ε • DS(A α) • SS(α) U FOLLOW(A) se α può generare ε Team ::= <SCHEMA> Schema Tabellino | Tabellino Difesa ::= ( Difesa_5 <T> <CENTROCAMPO> Modulo_D5 | Difesa_4 <T> <CENTROCAMPO> Modulo_D4 | Difesa_3 <T> <CENTROCAMPO> Modulo_D3 ) Modulo_D3 ::= ( Modulo_D3_C5_A2 | Modulo_D3_C4_A3 ) Modulo_D4 ::= ( Modulo_D4_C5_A1 | Modulo_D4_C4_A2 | Modulo_D4_C3_A3 ) Modulo_D5 ::= ( Modulo_D5_C4_A1 | Modulo_D5_C3_A2 ) La GRAMMATICA è LL(1)!

  9. Esempio [nome squadra] MyTeam [schema] D:3 - C:4 - A:3 [formazione] Storari, Balzaretti, Nesta, Ziegler, Seedorf, Maggio, Mariga, Gattuso, Milito, Totti, Acquafresca [riserve] Dida, Juan, Grosso, FerreiraPinto, Sneijder, Balotelli, Amauri S::=Formazione<EOF> Formazione::= <NOME_SQUADRA>NomeSquadra Team NomeSquadra::= <NOME> Team ::= <SCHEMA>Schema Tabellino Schema ::= <DIFESA>Difesa Tabellino ::= <FORMAZIONE>ElencoTitolariRiserve Difesa::= Difesa_3 <T> <CENTROCAMPO> Modulo_D3 Difesa_3 ::= <TRE> Modulo_D3 ::= Modulo_D3_C4_A3 Modulo_D3_C4_A3 ::= Centrocampo_4 <T> <ATTACCO> Attacco_3 Centrocampo_4 ::= <QUATTRO> Attacco_3 ::= <TRE> ElencoTitolari::= Nome (<COMMA> Nome)* Riserve ::= <RISERVE> ElencoRiserve ElencoRiserve::= Nome (<COMMA> Nome)*

  10. Schema di Funzionamento • File Excel contenete le statistiche relative ad una determinata giornata del campionato di Serie A. • (disponibile sul sitohttp://www.fantagazzetta.com) • Utilizzato per determinare: • quali giocatori sono scesi in campo e quindi appartengono alla formazione titolare da visualizzare (possibilità di effettuare delle sostituzioni se sono state inserite le “riserve”); • quali giocatori hanno segnato un goal, oppure sono stati ammoniti, espulsi ecc. ecc. (eventi che possono essere mostrati graficamente all’utente) • il punteggio associato ad un giocatore e quindi il punteggio totale realizzato schierando la formazione specificata in input. Scanner Parser Visitor

  11. Strumenti Utilizzati

  12. Package • contiene tutte le classi necessarie per la gestione dei giocatori e della squadra • contiene le classi per la “gestione” dei file. • Il parser effettua anche alcuni controlli semantici: • verifica che l’elenco dei titolari comprenda esattamente 11 giocatori; • verifica che l’elenco delle riserve comprenda al più 7 giocatori • verifica che non sia stato inserito più volte lo stesso giocatore • La classe TeamMaker effettua anche alcuni controlli: • verifica che i nomi dei giocatori siano tutti “validi”; • quando il modulo è stato inserito in input controlla che questo sia compatibile con il ruolo dei giocatori schierati come titolari; • quando il modulo non è stato introdotto in input verifica che il ruolo dei giocatori inseriti come titolari non determini uno schema non valido • grazie alla tecnica del double-dispatch visita l’albero (APT) e realizza la funzione di interpretazione • classe creata automaticamente; • effettua l’analisi lessicale (individua i token che compongono la stringa in input). • classe creata automaticamente; • effettua l’analisi sintattica(verifica che una frase possa essere costruita in base alle regole della grammatica); • produce una rappresentazione interna della frase – albero. • package creato automaticamente; • contiene le classi necessarie per la costruzione dell’albero.

  13. FantaManager (prototipo)

  14. Sviluppi Futuri • Possibilità di gestire un database di giocatori, che nel caso specifico corrisponde alla “rosa” dei giocatori della squadra e quindi prevedere la realizzazione di un wizard per la creazione/modifica di questo database e per l’inserimento della formazione. • Mantenere delle informazioni sui punteggi dei della “rosa”, offrendo all’utente la possibilità di consultare queste statistiche quando sceglie una nuova formazione. (si potrebbero creare dei grafici che utilizzano questi dati, visualizzano l’andamento delle prestazioni di ogni singolo giocatore nelle ultime “k” partite) Demo

More Related