Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini...

42
Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius

Transcript of Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini...

Page 1: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Linguaggi e Modelli Computazionalia.a. 2009/2010

Docente: Studente:

Enrico Denti Gabriele Morlini

FantaGenius

Page 2: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Lo scopo

Lo scopo di questa applicazione è aiutare il giocatore di Fantacalcio nelle attivita di routine, evitando di analizzare diverse pagine di quotidiani e siti internet, alla ricerca delle informazioni necessarie per essere vincenti in questo gioco.

L'applicazione deve fornire quindi le informazioni reperite dai siti web, in maniera comoda per il giocatore attraverso un interfaccia grafica, e aiutarlo nelle decisioni.

Ma cos’è il fantacalcio?

Un breve accenno..

Page 3: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Cos’è il Fantacalcio

• Il Fantacalcio è un gioco nel quale un gruppo di persone si sfidano con le proprie “fantasquadre”.

• Una “fantasquadra” è composta da 25 giocatori della serie A di squadre anche diverse.

• Le “fantasquadre” si affrontano in un campionato parallelo a quello della serie A.

• Le “fantasquadre” si affrontano in una serie di partite,per ognuna delle quali bisogna creare una formazione, in cui vince chi fa il punteggio più alto.

• Il punteggio della formazione schierata è determinata dalla somma dei voti  assegnati in pagella dai quotidiani e dai punti "bonus" e "malus"  .

Page 4: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Le attivà di routine

• Prima di ogni giornata di campionato bisognava:

– Conoscere le formazioni probabili, per sapere chi gioca o meno.

– Conoscere le medie dei voti dei giocatori, per scegliere i giocatori migliori

– Creare una formazione.

• Dopo ogni giornata di campionato bisognava:

– Calcolare il punteggio di una partita fra due formazioni.

– Dal punteggio ricavare il risultato.

Page 5: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Obiettivi

• Realizzare un parser in grado di prima di tutto di riconoscere una pagina web già esistente, fornendo solo le informazioni interessanti all’interprete, organizzandole in maniera adeguata, in una insieme di nodi/classi legate fra di loro.

• Realizzare un interprete in grado di utilizzare le informazioni fornite sotto forma di classi, per aiutare l’utente nelle attività di routine,attraverso una comoda interfaccia grafica.

Page 6: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Linguaggi

• I linguaggi studiati quindi nel corso della realizzazione di questa applicazione, si riconducono all’ HTML (HyperText Markup Language).

• Al fine di poter estrarre le informazioni dalle pagine, sono state realizzate delle grammatiche che riconoscono i tipi e la posizione dei tag Html.

• Ogni grammatica può essere divisa in 2 parti:

– Una parte condivisa per riconoscere gli elementi costitutivi di un documento HTML.

– Una parte specifica per riconoscere le informazioni utili.

Page 7: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: I siti internet

Le pagine web da cui si è partiti per scrivere le grammatiche:

• Per le formazioni probabili

– www.fantagazzetta.com/probabili-formazioni-serie-a.asp

• Per conoscere le medie dei voti dei giocatori, per scegliere i giocatori migliori:

– www.fantagazzetta.com/statistiche_portieri.asp

– www.fantagazzetta.com/statistiche_difensori.asp

– www.fantagazzetta.com/statistiche_centrocampisti.asp

– www.fantagazzetta.com/statistiche_attaccanti.asp

• Per i voti dei giocatori per il calcolo del punteggio di una partita.

– http://www.pianetafantacalcio.it/Voti_Ufficiali.asp

Page 8: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Le grammatiche

Le grammatiche:

• Per le formazioni probabili:

– www.fantagazzetta.com/probabili-formazioni-serie-a.asp

• Per conoscere le medie dei voti dei giocatori, per scegliere i giocatori migliori:

– www.fantagazzetta.com/statistiche_portieri.asp

– www.fantagazzetta.com/statistiche_difensori.asp

– www.fantagazzetta.com/statistiche_centrocampisti.asp

– www.fantagazzetta.com/statistiche_attaccanti.asp

• Per i voti dei giocatori per il calcolo del punteggio di una partita.

– http://www.pianetafantacalcio.it/Voti_Ufficiali.asp

StatPortGrammar.jj

ProbFormGrammar.jj

VotiGrammar.jj

StatGiocGrammar.jj

Page 9: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: la parte comune

• La parte comune si tratta principalmente dello scanner che riconosce i tag HTML e li fornisce sottoforma di token al parser, e alcune produzioni della grammatica.

TOKEN:

<DIGIT>::= ["0"-"9"]

<#StringElement>::= <DIGIT> | ["a"-"z"] | ["A"-"Z"] | "!" | "?" | ":" | "_"| "=" | "/" | "\"" | "\\" | "-" | ";" | "(" | ")" | "{" | "}" | "[" | "]" | "+" | "&" | "|" | "*" | "#" | "%" | "." | ","| "\'" | "@" | "\u00c3\u00a8" | … e atri caratteri particolari...>

<STRING>::= <StringElement> (<StringElement> | " ")*>

<SUBSTRING::= "\'" (<STRING> | "<" | ">")* "\'">

Page 10: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: la parte comune

• La parte comune si tratta principalmente dello scanner che riconosce i tag HTML e li fornisce sottoforma di token al parser, e alcune produzioni della grammatica.

TOKEN:

<HTMLstart>::= "<html " <STRING> <END>

<HTMLend>::= "</html>"

<BODYstart>::= "<body>"

<BODYend>::= "</body>"

<HEADstart::= "<head>"

<HEADend::= "</head>"

<END>::= "/>" | ">"

Page 11: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: la parte comune

• La parte comune si tratta principalmente dello scanner che riconosce i tag HTML e li fornisce sottoforma di token al parser, e alcune produzioni della grammatica.

TOKEN:

<TABLEstart>::= "<table " <STRING> ">"

<TABLEend>::= "</table>"

<TRstart>::= "<tr " <STRING> ">" | "<tr>"

<TRend>::= "</tr>"

<TDstart>::= "<td " <STRING> ">" | "<td>"

<TDend>::= "</td>"

e così via per tutti i possibili tag HTML...

Page 12: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: la parte comune

• La parte comune si tratta principalmente dello scanner che riconosce i tag HTML e li fornisce sottoforma di token al parser, e alcune produzioni della grammatica.

SCOPO:

Html_page ::= Html_comment

<HTMLstart>

<HEADstart> Html_HEAD <HEADend> <BODYstart> Html_BODY

<BODYend>

<HTMLend>

<EOF>

Page 13: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: la parte comune

• La parte comune si tratta principalmente dello scanner che riconosce i tag HTML e li fornisce sottoforma di token al parser, e alcune produzioni della grammatica.

PRODUZIONI:

Html_HEAD ::= ( Html_head_element )*

Html_head_element ::= <META>|<TITLE>|<LINK>|

Html_script| Html_comment

Html_BODY ::=( Html_body_element )*

Html_body_element::=Html_comment | Html_href | Html_form | Html_ul | Html_table| Html_script |

<BR>| <STRING> | Html_div

|...e molti altri..

Page 14: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: la parte comune

• La parte comune si tratta principalmente dello scanner che riconosce i tag HTML e li fornisce sottoforma di token al parser, e alcune produzioni della grammatica.

PRODUZIONI:

Html_img::=<IMGstart> ( <STRING> )+ <END>

Html_strong::=<STRONGstart> ( <STRING> | <EM> | Html_img | Html_href | <BR> )* <STRONGend>

Html_href::=<HREFstart> ( <STRING> | Html_strong | Html_img )*

<HREFend>

Html_span::=<SPANstart> ( <BR> | <STRING> | <BOLD> |

Html_img | Html_strong )* <SPANend>

....E così via per tutti gli altri possibili elementi Html...

Page 15: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: la parte comune

• La parte comune si tratta principalmente dello scanner che riconosce i tag HTML e li fornisce sottoforma di token al parser, e alcune produzioni della grammatica.

PRODUZIONI:

Html_div ::=

<DIVstyleStart> ( Html_body_element )+ ( <DIVend> )?

| ( <DIVgen> ( <STRING> )* <END> | "<div>" ) ( Html_body_element )+ ( <DIVend> )?

|<DIVtitolo> <STRING> <DIVend>

| ……..Altra Produzione diversa per ogni grammatica specifica di una certa pagina web

Page 16: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Probabili Formazioni

• In una pagina web ci sono informazioni: trascurabili

Html_div ::=

<DIVstyleStart> ( Html_body_element )+ ( <DIVend> )?

| ( <DIVgen> ( <STRING> )* <END> | "<div>" ) ( Html_body_element )+ ( <DIVend> )?

|<DIVtitolo> <STRING> <DIVend>

| <DIVprobabili> Probabili <DIVend>

e altre interessanti

Page 17: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Probabili Formazioni

Le formazioni probabili sono composti da una serie di scontri

Probabili ::=( <DIVscontro> Scontro <DIVend> )+ <DIVstyleStart><IFRAME><DIVend> ( <DIVscontro> Scontro <DIVend> )+

Page 18: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Probabili Formazioni

Ogni scontro contiene diverse informazioni:Scontro::=<DIVtitolo><DIVintestazione>

<STRING><DIVend> <DIVorario><STRING><DIVend>

<DIVend> <DIVgen> <STRING> <END>

Ultime <DIVend> <DIVteam> TeamSx <DIVend> <DIVteam> TeamDx <DIVend> <DIVgen> <STRING> <END>

Ultime <DIVend> html_body_element

Page 19: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Probabili Formazioni

Ogni scontro contiene diverse informazioni:come il nome della squadra, e informazioni specifiche su alcuni giocatori.

Ultime ::= <BOLD> ( <BR> )+ <SPANstart> <STRING> <SPANend>

<STRING> <BOLD> <BR> ( <STRING> | <SUBSTRING> )* ( <BR> )+

InfoGiocatori ( html_href ( <BR> )+ )? <SPANstart> <STRING> <SPANend> ( <BR> )+

Page 20: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Probabili Formazioni

Informazioni specifiche su alcuni giocatori:

InfoGiocatori ::= ( <DIVstyleStart> ( Squalificati | Infortunati | InDubbio )

<DIVend> ( <BR> )+ )*Squalificati ::= <SPANsqualificati>

<BR> <STRING>Infortunati ::= <SPANinfortunati>

<BR> <STRING>InDubbio ::= <SPANinDubbio>

<BR> <STRING>

Page 21: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Probabili Formazioni

Informazioni specifiche sui giocatori titolari e in panchina in uno scontro:

TeamSx::= ( GiocatoreSx )+ <DIVpanchinaSx> <STRING> <DIVend>

( GiocatoreSx )+GiocatoreSx::= <DIVsx> <STRING> <DIVend>

<DIVruolo> <STRING> <DIVend>TeamDx::= ( GiocatoreDx )+

<DIVpanchinaDx> <STRING> <DIVend>( GiocatoreDx )+

GiocatoreDx::=<DIVruolo><STRING><DIVend> <DIVdx> <STRING> <DIVend>

Nome giocatore

Page 22: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Probabili Formazioni

Token specifici delle probabili formazioni:

<SPANsqualificati>::= <SPANstart> "Squalificati" <SPANend><SPANinfortunati>::=<SPANstart> "Infortunati" <SPANend><SPANinDubbio>::= <SPANstart> "In dubbio" <SPANend><DIVprobabili>::= "<div id=\"probabili\">"<DIVscontro>::= "<div class=\"scontro \">"<DIVteam>::= "<div class=\"team\">"<DIVsx>::= "<div class=\"sx\">"<DIVpanchinaSx>::= "<div class=\"panchinasx\">"<DIVdx>::= "<div class=\"dx\">"<DIVpanchinaDx>::= "<div class=\"panchinadx\">"<DIVruolo>::= "<div class=\"ruolo\">"<DIVintestazione>::= "<div class=\"intestazione\">" <DIVorario>::= "<div class=\"orario\">"

Page 23: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Statistiche

• In una pagina web ci sono informazioni: trascurabili

Html_div ::=

<DIVstyleStart>

( Html_body_element )+

( <DIVend> )? |

( <DIVgen> ( <STRING> )* <END> | "<div>" )

( Html_body_element )+

( <DIVend> )?

|<DIVtitolo> <STRING> <DIVend>

| <DIVstat> Stat <DIVend>

e altre interessanti

<DIVstat>::= "<div class=\"stat-box\">"

<DIVstat>::= "<div class=\"stat-box\">"

Page 24: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Statistiche

Le statistiche di tutti i giocatori di un ruolo sono contenuti all'interno di una tabella:

Stat ::=<TABLEstart> Giocatori<TABLEend>

Ogni riga contiene i dati di un giocatore:

Giocatori ::= ( <TRstart> Giocatore <TRend> )+

Page 25: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Statistiche

Ogni statistica di un giocatore del campo,ovvero di tuttiescluso il portiere, ha i seguenti dati:

Giocatore ::= <TDstart> <STRING> <TDend> <TDstart> <HREFstart> <STRING> <HREFend> <TDend> <TDstart> <DIGIT> <TDend> <TDstart> ( <STRING> | <DIGIT> ) <TDend> <TDstart> ( <STRING> | <DIGIT> ) <TDend> <TDstart> ( <STRING> | <DIGIT> ) <Tdend> <TDstart> <DIGIT> <TDend> <TDstart> <DIGIT> <TDend> <TDstart> <DIGIT> <TDend> <TDstart> <DIGIT> <TDend> <TDstart> <DIGIT> <TDend> <TDstart> <DIGIT> <TDend> <TDstart> <STRING> <TDend> <TDstart> ( <STRING> | <DIGIT> ) <TDend>

ID GiocatoreCognome Giocatore

Partite Giocate

Media Voto

Media Voto con Bonus/MalusMedia Voto prec. con Assist

Goal Fatti Rigori a segnoRigori sbagliati Assist

Ammonizioni Espulsioni

Squadra

Quotazione

Page 26: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Statistiche

Mentre il portiere ha i seguenti dati:

Giocatore ::= <TDstart> <STRING> <TDend> <TDstart> <HREFstart> <STRING> <HREFend> <Tdend> <TDstart> <DIGIT> <Tdend> <TDstart> ( <STRING> | <DIGIT> ) <TDend> <TDstart> ( <STRING> | <DIGIT> ) <TDend> <TDstart> <DIGIT> <TDend> <TDstart> <DIGIT> <TDend> <TDstart> <DIGIT> <TDend> <TDstart> <DIGIT> <TDend> <TDstart> <STRING> <TDend> <TDstart> ( <STRING> | <DIGIT> ) <TDend>

ID GiocatoreCognome Giocatore

Partite Giocate

Media Voto

Media Voto con Bonus/MalusRigori parati

Ammonizioni Espulsioni

SquadraQuotazione

Gol subiti

Page 27: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Voti

Per i voti si è utilizzato un sito diverso,più orientato alle tabelle, questo ha implicato una grammatica un po' più rigida e meno leggibile:

Html_div ::= ...sempre uguale... | <DIVvoti> <TABLEstart> Voti <TABLEend> <DIVend>

Voti ::=

{<TRstart> <TDstart> Html_table <TDend> <TRend>}3

<TRstart> ( <TDstart> Html_body_element <TDend> )+ <TRend>....

Page 28: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Voti

....<TRstart> <TDstart> Squadre <Tdend> <TRend> <TRstart> <TDstart> Html_table <Tdend><Trend>Squadre::= <BR> ( Html_script )+

Html_table Html_div <BR> ( Squadra )+ <BR>

Squadra ::= <TABLEstart>....<TABLEend>Giocatori

Page 29: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Voti

Giocatori ::= ( <TABLEstart> <TRstart> Giocatore <TRend> ( <TRstart> ( <TDstart> html_body_element <TDend> )+ <TRend> )* <TABLEend> )+ <BR>

Page 30: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Le grammatiche: Voti

Il voto di un giocatore ha 29 possibili attributi/colonne..il risultato è una grammatica un po' prolissa..

Giocatore ::=

<TDstart> ( <STRING> | <IMGstart> <END> )* <Tdend>

<TDstart> ( <IMGpor> | <IMGdif> | <IMGcen> | <IMGatt> | <IMGstart> <END> )* <TDend>

<TDstart> ( <HREFstart> <STRING> <HREFend> | <STRING> ) <TDend>

<TDstart> ( <STRING> | <IMGamm> | <IMGesp> )* <Tdend>

<TDstart> ( <STRING> | <IMGstart> <END> )* <Tdend>

<TDstart> ( <STRING> | <DIGIT> ) <TDend> ....

Page 31: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Grammatica e Linguaggio: Tipologia

• Grammatica di tipo 2(context‐free) secondo Chomsky perchè le produzioni sono vincolate alla forma::

A → α

con A ε VN e α ε (VN U VT)+• Linguaggio di tipo 2 perché sono presenti produzioni che

contengono self-embedding:

A → α1 A α2

con A ε VN e α1, α2 ε (VN U VT)+• LL(1)perchè l’insieme degli director-symbols corrispondenti

alle parti destre delle produzioni alternative di uno stesso metasimbolo sono fra loro disgiunti;

Page 32: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

Grammatica e Linguaggio: Tipologia

• Grammatica di tipo 2(context‐free) secondo Chomsky perchè le produzioni sono vincolate alla forma::

A → α

con A ε VN e α ε (VN U VT)+• Linguaggio di tipo 2 perché sono presenti produzioni che

contengono self-embedding:

A → α1 A α2

con A ε VN e α1, α2 ε (VN U VT)+• LL(1)perchè l’insieme degli director-symbols corrispondenti

alle parti destre delle produzioni alternative di uno stesso metasimbolo sono fra loro disgiunti;

All’interno di un documento HTML potrei avere una serie di elementi di tipo DIV annidati:

Html_body_element::= <STRING>|…| Html_divHtml_div ::= “<div>”( Html_body_element )+ ( <DIVend> )?

Es.:<div><div>…<div>Ciao!!</div>…</div></div>

All’interno di un documento HTML potrei avere una serie di elementi di tipo DIV annidati:

Html_body_element::= <STRING>|…| Html_divHtml_div ::= “<div>”( Html_body_element )+ ( <DIVend> )?

Es.:<div><div>…<div>Ciao!!</div>…</div></div>

All’interno di un documento HTML potrei avere una serie di elementi di tipo DIV annidati:

Html_body_element::= <STRING>|…| Html_divHtml_div ::= “<div>”( Html_body_element )+ ( <DIVend> )?

Es.:<div><div>…<div>Ciao!!</div>…</div></div>

All’interno di un documento HTML potrei avere una serie di elementi di tipo DIV annidati:

Html_body_element::= <STRING>|…| Html_divHtml_div ::= “<div>”( Html_body_element )+ ( <DIVend> )?

Es.:<div><div>…<div>Ciao!!</div>…</div></div>

All’interno di un documento HTML potrei avere una serie di elementi di tipo DIV annidati:

Html_body_element::= <STRING>|…| Html_divHtml_div ::= “<div>”( Html_body_element )+ ( <DIVend> )?

Es.:<div><div>…<div>Ciao!!</div>…</div></div>

All’interno di un documento HTML potrei avere una serie di elementi di tipo DIV annidati:

Html_body_element::= <STRING>|…| Html_divHtml_div ::= “<div>”( Html_body_element )+ ( <DIVend> )?

Es.:<div><div>…<div>Ciao!!</div>…</div></div>

Page 33: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: La squadra

Per salvare e caricare una squadra è stato realizzato uno specifico linguaggio di tipo 3(non c'è self-enbedding),descritto dalla seguente grammatica , gestita tramite la funzione “.split(String sep)” della classe String:

Squadra:=ListaGiocatori"\n"

ListaGiocatori"\n"

ListaGiocatori"\n"

ListaGiocatori

ListaGiocatori::=(Giocatore ";" ListaGiocatori)|Giocatore ";"

Giocatore::=Nome","Squadra

Nome::=<STRING>

Squadra::=<STRING>MiaSquadra.txt:

Antonioli,CESENA;Cavalieri,CESENA;Handanovic,UDINESE;Criscito,GENOA;Samuel,INTER;Nesta,MILAN;Cassetti,ROMA;Dias,LAZIO;dellafiore,PARMA;Felipe,FIORENTINA;Grava,NAPOLI;

Cambiasso,INTER;Pirlo,MILAN;alvarez e. a.,BARI;Colucci,CESENA;Giovinco,PARMA;Marchionni,FIORENTINA;Jimenez,CESENA;Marques,PARMA;Gilardino,FIORENTINA;Cassano,SAMPDORIA;Del Piero,JUVENTUS;pozzi,SAMPDORIA;paloschi,PARMA;marilungo,SAMPDORIA;

Page 34: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: La formazione

Per salvare e caricare una formazione è stato realizzato uno specifico linguaggio di tipo 3(non c'è self-embedding) descritto dalla seguente grammatica, gestita tramite la funzione “.split(String sep)” della classe String:

Formazione_S::="titolari:\n"Formazione

"panchina:\n"Formazione

Formazione:=Portiere"\n"

ListaGiocatori"\n"

ListaGiocatori"\n"

ListaGiocatori

Portiere::=<STRING>

ListaGiocatori::=(<STRING> "," ListaGiocatori)

|<STRING>

MiaFormazione.txt:titolari:

AntonioliNesta,criscito,samuel,DiasGiovinco,Pirlo,Cambiasso

Cassano,gilardino,del Pieropanchina:

HandanovicCassetti,grava

Marques,colucciPozzi

Page 35: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Strumenti utilizzati

Linguaggio di programmazione: JavaSE 1.6

Generazione automatica di scanner e parser: JavaCC 5.0

Interfaccia graficaNetBeans 6.8

Ambiente di sviluppo:Eclipse 3.5

Page 36: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Architettura

Package:

App: Classi necessarie all’interfaccia grafica.

Elements: Classi a cui corrispondo le principali entità del sitema.

Parser: Classi relative allo scanner ed al parser create in automatico da javacc.

Page 37: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Architettura class app

javax.swing.JDialog

FantaGeniusAboutBox

- closeButton: javax.swing.JButton

+ closeAboutBox() : void+ FantaGeniusAboutBox(java.awt.Frame)- initComponents() : void

SingleFrameApplication

FantaGeniusApp

# configureWindow(java.awt.Window) : void+ getApplication() : FantaGeniusApp+ main(String[]) : void# startup() : void

FantaGeniusController

~ allAttStat: ArrayList<StatisticaGiocCampo> = null~ allCentrStat: ArrayList<StatisticaGiocCampo> = null~ allDifStat: ArrayList<StatisticaGiocCampo> = null~ allPortStat: ArrayList<StatisticaPortiere> = null- offLine: boolean = true- parserProbForm: probFormGram = null- parserStat: parser.statisticheGiocCampo.StatGram = null- parserStatPort: parser.statistichePortieri.StatGram = null- parserVoti: VotiGram = null- prob: Probabili = null- view: FantaGeniusView = null

+ aggStato() : Probabili- calcolaRisultato(String, Valutazioni, boolean) : String+ calcolaRisultatoSfida(String, String) : String+ caricaFormCasa(String) : void+ caricaFormOspite(String) : void+ checkAndSet(Probabili, JTextField, JComboBox) : void+ FantaGeniusController(FantaGeniusView)+ getFormOpt(Squadra) : void- getInputStreamSite(String) : InputStreamReader+ getProbFormSiteReader() : InputStreamReader- getStatAttSiteReader() : InputStreamReader- getStatCentrSiteReader() : InputStreamReader- getStatDifSiteReader() : InputStreamReader- getStatPortSiteReader() : InputStreamReader- getVotiSiteReader() : InputStreamReader+ isOffLine() : boolean- parserStatAtt() : void- parserStatCentr() : void- parserStatDif() : void- parserStatPortieri() : void- parserVoti() : Valutazioni- reducePortStat(Squadra) : ArrayList<StatisticaPortiere>- reduceStat(ArrayList<StatisticaGiocCampo>, Giocatore[]) : ArrayList<StatisticaGiocCampo>+ salvaFormCasa(String) : void+ salvaFormOspite(String) : void+ setOffLine(boolean) : void- updateStateGioc(Giocatore) : void

FrameView

FantaGeniusView

- fantaGeniusContr: FantaGeniusController = new FantaGenius...- offLine: boolean- sq: Squadra = null

- aggStato(Probabili) : void- aggStatoGiocMouseClicked(java.awt.event.MouseEvent) : void- calcFormIdealMouseClicked(java.awt.event.MouseEvent) : void- calcolaRisultato() : String- CaricaFormCasaMouseClicked(java.awt.event.MouseEvent) : void- CaricaFormOspiteMouseClicked(java.awt.event.MouseEvent) : void+ FantaGeniusView(SingleFrameApplication)- getLoadFile() : String- getSaveFile() : String- initComboSquadre() : void- initComponents() : void- jButton3MouseClicked(java.awt.event.MouseEvent) : void- jMenuItem1MouseClicked(java.awt.event.MouseEvent) : void- jMenuItem1MousePressed(java.awt.event.MouseEvent) : void- jMenuItem2MousePressed(java.awt.event.MouseEvent) : void- jPanel2MouseClicked(java.awt.event.MouseEvent) : void- jPanel3MouseClicked(java.awt.event.MouseEvent) : void- jTabbedPane1MouseClicked(java.awt.event.MouseEvent) : void- loadTeam(boolean) : void- offLineMenuItem1MouseClicked(java.awt.event.MouseEvent) : void- offLineMenuItem1StateChanged(javax.swing.event.ChangeEvent) : void- SalvaFormCasaMouseClicked(java.awt.event.MouseEvent) : void- SalvaFormOspiteMouseClicked(java.awt.event.MouseEvent) : void- savePressed(boolean) : void+ showAboutBox() : void

java.awt.Dialog

TextAreaDialog

- jScrollPane1: javax.swing.JScrollPane- jTextArea1: javax.swing.JTextArea

- closeDialog(java.awt.event.WindowEvent) : void+ getjTextArea() : JTextArea- initComponents() : void+ setjTextArea(JTextArea) : void+ TextAreaDialog(java.awt.Frame, boolean)

-optFormDialog

-fantaGeniusContr

-view

Page 38: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Architettura class elements

Giocatore

- nome: String- rigorista: boolean- ruolo: String- squadra: String- state: StateGioc = StateGioc.NNNOTO

+ equals(Object) : boolean+ getNome() : String+ getRuolo() : String+ getSquadra() : String+ getState() : StateGioc+ Giocatore()+ Giocatore(String, String, String)+ hashCode() : int+ isRigorista() : boolean+ setNome(String) : void+ setRigorista(boolean) : void+ setRuolo(String) : void+ setSquadra(String) : void+ setState(StateGioc) : void+ toString() : String

Squadra

- attaccanti: Giocatore ([]) = new Giocatore[6]- centrocampisti: Giocatore ([]) = new Giocatore[8]- difensori: Giocatore ([]) = new Giocatore[8]- portieri: Giocatore ([]) = new Giocatore[3]

+ getAttaccanti() : Giocatore[]+ getCentrocampisti() : Giocatore[]+ getDifensori() : Giocatore[]+ getPortieri() : Giocatore[]+ setAttaccanti(Giocatore[]) : void+ setCentrocampisti(Giocatore[]) : void+ setDifensori(Giocatore[]) : void+ setPortieri(Giocatore[]) : void+ Squadra(String)

«enumeration»StateGioc

TITOLARE PANCHINA INFORTUNATO SQUALIFICATO INDUBBIO NNNOTO

Utility

+ convertiSquadra(String) : String+ toFloat(String) : float+ toInt(String) : int

probForm

+ Probabil i

+ Scontro

+ Team

statistiche

+ FormOpt

+ Statistica

+ StatisticaGiocCampo

+ StatisticaPortiere

v oti

+ Valutazione

+ Valutazioni

+ ValutazioniSquadra

-portieri

-difensori

-centrocampisti

-attaccanti

-state

Page 39: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Test

• L'applicazione è già stata utilizzata nelle ultime due giornate di campionato di serie A.

• I giocatori che l'hanno provato sono rimasti soddisfatti.

Page 40: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Interfaccia grafica

Colori per rappresentare stato giocatori:Verde: titolare

Azzurro: panchinaRosso: squalificatoGrigio: infortunato

Bianco: non esistente

Page 41: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Interfaccia grafica

Page 42: Linguaggi e Modelli Computazionali a.a. 2009/2010 Docente: Studente: Enrico Denti Gabriele Morlini FantaGenius.

FantaGenius: Possibili sviluppi

Utilizzo di tuProlog per calcolare il risultato di una partita e calcolare una formazione ideale in maniera più “intelligente” e flessibile.

Unificare in un unico file la parte comune delle 4 grammatiche riguardanti i siti web.

Possibilità di modificare alcuni parametri dell'applicazione, attraverso l'interfaccia grafica.