s ::= formazione formazione ::= nomesquadra team nomesquadra ::= team ::= schema tabellino |...

14
FantaManag er Linguaggio per descrivere e visualizzare graficamente una squadra di calcio. Prospero Rossini Linguaggi e modelli computazionali LS

Upload: crocetta-grasso

Post on 02-May-2015

214 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

FantaManagerLinguaggio per descrivere e

visualizzare graficamente una squadra di calcio.

Prospero Rossini Linguaggi e modelli computazionali LS

Page 2: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

• Nome Squadra

• Schema• Elenco Giocatori

• ….Descrivere

una squadra

• 4-4-2 • 3-4-3• 5-3-2 • …

Visualizzare la squadra sul

campo, in base

alle informazioni inserite

Riconoscere un LINGUAGGIO in grado di descrivere una squadra di calcio, e quindi creare una GRAMMATICA che definisca, tramite notazioni formali, le modalità per costruire “frasi corrette”

Realizzare un INTERPRETE che, data in input una stringa di caratteri sia in grado di riconoscere se questa è una frase del Linguaggio (Analisi Sintattica) o in caso contrario di segnalare la presenza di errori (Sintax Error)

Utilizzare le informazioni inserite in input quando queste costituiscono una frase corretta del linguaggio, ed eseguire alcune azioni particolari in accordo alla Semantica associata alla frase stessa (visualizzare la disposizione dei giocatori in campo,…)

Obiettivi del ProgettoSi vuole realizzare un sistema che permetta di:

?

Page 3: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

Di seguito, la definizione della grammatica in notazione BNF G = < VT, VN, P, S >

Definizione della Grammatica

un nome da assegnare al team

uno schema di gioco

un elenco di giocatori che vanno a comporre la formazione titolare

un elenco di giocatori che vanno a comporre la “panchina”

In questo caso vogliamo definire una serie di informazioni riferite ad una squadra di calcio, in particolare:

La Grammatica definisce l’insieme delle regole sintattiche che impongono la modalità di costruzione delle frasi del linguaggio.

Page 4: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

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

Grammatica (1/3)Scopo

Formazione

Team

Schema

Tabellino

NomeSquadra

“TEAM ” è composto da <SCHEMA> “SCHEMA” e “TABELLINO” oppure solo da “TABELLINO”“TABELLINO ” è composto da <FORMAZIONE> “ELENCOTITOLARI” e d eventualmente da “RISERVE”

Schema

Page 5: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

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>

Grammatica (2/3)

Schema

Tabellino ::= <TABELLINO> ElencoTitolari (Riserve)?Riserve ::= <RISERVE> ElencoRiserve

Nome

Page 6: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

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”])*> }

Grammatica (3/3)

Page 7: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

TIPO 0

TIPO 1

TIPO 2

TIPO 3

Analisi della Grammatica (1/2)

GR

AM

MA

TIC

HE

TIPO 0

TIPO 1

TIPO 2

TIPO 3

LINGUAGGI

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

…tuttavia, non presenta Self-Embedding.Non esiste nessun simbolo non terminale A tale che: A =>* α1 A α2,

con α1, α2 є V+ ed A є VN

TeoremaUna Grammatica Context-Free (Tipo 2) che non contenga Self-Embedding genera un Linguaggio Regolare.

Page 8: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

…tuttavia, sappiamo che:

SS(α) se α non genera mai εDS(A α)

SS(α) U FOLLOW(A) se α può generare ε

Analisi della Grammatica (2/2)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-Most Derivation, utilizzando al più k simboli della frase per scegliere con certezza la produzione opportuna per la riscrittura

La grammatica è LL(1)?

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

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 )

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.

La GRAMMATICA

è LL(1)!

Page 9: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

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, Ferreira Pinto, Sneijder, Balotelli, Amauri

ElencoTitolari ::= Nome (<COMMA> Nome )*

Riserve ::= <RISERVE> ElencoRiserveElencoRiserve ::= Nome (<COMMA> Nome)*

S ::= Formazione <EOF> Formazione ::= <NOME_SQUADRA> NomeSquadra Team

NomeSquadra ::= <NOME>

Team ::= <SCHEMA> Schema Tabellino

Schema ::= <DIFESA> Difesa

Tabellino ::= <FORMAZIONE> ElencoTitolari Riserve

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>

Page 10: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

Schema di Funzionamento

Scanner Parser

Visitor

File Excel contenete le statistiche relative ad una determinata giornata del campionato di Serie A.(disponibile sul sito http://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.

Page 11: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

Strumenti UtilizzatiLinguaggio di Programmazione• Java JDK 1.6

Ambiente di Sviluppo• Eclipse GALILEO 3.5.2

Parser Generator LL in ambiente Java e “Companion Tools”• JavaCC: generatore di parser top-down per grammatiche LL(k) • JTB: tool per la generazione di Abstract Syntax Tree a partire da grammatiche

Javacc; offre la possibilità di ottenere in automatico i packages “syntaxtree” e “visitor”

• JJDoc: genera documentazione per la grammatica Librerie di Supporto Java• Jericho: Jericho HTML Parser è una libreria Java che permette l'analisi e la

manipolazione di parti di un documento HTML • iText: libreria che permette di generare file PDF “on-the-fly”

Page 12: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

Package• MainClass• ControlClass

control

• FantaManagerGUI• …

gui

• PlayersFileReader

• XLSProcessor• PrintToPDF

fileUtility

• FantaManagerParserTokenManager

• FantaManagerParser• …

parser

• Nome• Nome Squadra• …

syntaxtree

• Visitor• DepthFirstVisitor• FantaManagerVisitor• …

visitor

• Player• TeamMaker• SoccerFieldMaker• TeamScoreCalculator

team

- 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.

- grazie alla tecnica del double-dispatch visita l’albero (APT) e realizza la funzione di interpretazione

- contiene le classi per la “gestione” dei file.

- contiene tutte le classi necessarie per la gestione dei giocatori e della squadra

- 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

Page 13: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

FantaManager (prototipo)

Page 14: S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari

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