Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.
-
Upload
valerio-esposito -
Category
Documents
-
view
216 -
download
0
Transcript of Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.
RUNHOMELuca Bueti
Progetto di Linguaggi e Modelli Computazionali LS
LINGUAGGIO PER LA DESCRIZIONE DI UNA PARTITA DI BASEBALL (MLB)
Luca Bueti - RunHome 2
Obiettivi
Progettare un linguaggio che consenta di descrivere ogni avvenimento importante di una partita di baseballIl linguaggio dovrà essere sintetico ma
facilmente comprensibile da un “addetto ai lavori”
Produrre una rappresentazione finale già utilizzabilePagina web HTML
07/07/2011
Luca Bueti - RunHome 3
Analisi del problema
Necessità di un parser che effettui l’analisi grammaticale e sintattica dell’input segnalando eventuali errori
Visitor che valuti l’APT generato dal parser e segnali eventuali errori semantici
Componente che utilizzi le strutture generate dal visitor per produrre una rappresentazione della partita in HTML
07/07/2011
Luca Bueti - RunHome 4
Un esempio di base 1/2Game {
2010-11-01
San_Francisco_Giants {
Lineup {
RF 56 A._Torres
2B 21 F._Sanchez
C 28 B._Posey
LF 13 C._Ross
3B 5 J._Uribe
1B 17 A._Huff
SS 16 E._Renteria
CF 33 A._Rowand
P 55 T._Lincecum
}
Bench {
CL 38 B._Wilson
DH 9 P._Burrel
}
}
Texas_Rangers {Lineup {
SS 1 E._Andrus3B 10 M._YoungCF 32
J._HamiltonRF 17 N._Cruz2B 5 I._KinslerLF 7 D._MurphyC 11 B._Molina1B 18
M._MorelandP 33 C._Lee
}Bench {
DH 27 V._Guerrero
RP 30 N._Feliz}
}
Una delle due squadre
Formazione iniziale
07/07/2011
Componenti panchina
Luca Bueti - RunHome 5
Un esempio di base 2/2Final 3:1
Recap {
1 Top {…} Bottom {…}
…
5
Top
{
AtBat 17 S(L) S(L) 1stB (E)
AtBat 9 S(L) S(S) F S(S) SO
AtBat 16 S(L) B S(F) B GO Runner 17 FRCO
Runs 0 Hits 0 Errors 1
}
Bottom
{
AtBat 5 S(L) GO
AtBat 7 S(L) S(F) S(S) SO
AtBat 11 S(S) S(S) GO
Runs 0 Hits 0 Errors 0
}
6…
Uno degli inning
Le due metà di un inning
Un turno in battuta (battitore e corridori)
07/07/2011
Luca Bueti - RunHome 6
Strumenti di sviluppo
JavaCCGeneratore di parser top-down per
grammatiche LL(k) JTB
Utilizzato insieme a JavaCC, è un generatore di Abstract Syntax Tree
NetBeansAmbiente di sviluppo multilinguaggio
07/07/2011
Luca Bueti - RunHome 7
Grammatica: tokens
Tokens (alcuni esempi)
< GAME: "Game" >| < DATE_US : (["0"-"9"])(["0"-"9"])(["0"-"9"])(["0"-"9"])"-"(["0"-"9"])(["0"-"9"])"-"(["0"-"9"])(["0"-"9"]) >| < LINEUP : "Lineup" >| < BENCH : "Bench" >| < POSITION : "P" | "C" | "1B" | "2B" | "3B" | "SS" | "LF" | "CF" | "RF" >| < PREFERRED_POSITION : "SP" | "CL" | "RP" | "C" | "1B" | "2B" | "3B" | "SS" | "LF" | "CF" | "RF" | "DH" >| < PITCH : "B" | "S(L)" | "S(S)" | "S(F)" | "F" | "HBP" >| < STEAL : "ST" | "CST" >| < NO_HIT : "SO" | "W" >| < HIT : "SAC" | "FC" | "FOULO" | "FO" | "TO" | "GO" | "LO" | "PO" | "HOMER">| < ERR : "(E)" >| < BASE : "1stB" | "2ndB" | "3rdB" | "homeB" >| < RUNNER_RES : "S" | "T" | "FRCO" | "O" >| < STRINGA: (["A"-"Z","a"-"z","0"-"9","_","\'",".","à","è","é","ò","ù","ç","ì","È","-"])+ >| < CARD_NUMBER : (["0"-"9"]) | ((["1"-"9"])(["0"-"9"])*) >| < COLUMN: ":" >| …
KEYWORD(il contenuto non è rilevante in fase
di valutazione)
NOTA: Alcuni token sono in comune, lo scanner riconoscerà
SEMPRE la prima regola. Questo non è un problema
perché i token saranno alternativi all’interno della stessa
produzione.
“STATIC FIELD”(il contenuto è rilevante ai fini della
valutazione finale)
07/07/2011
Luca Bueti - RunHome 8
Grammatica: Partita
Scope() ::=Game() ::=
< GAME > < LBRACE > Game() < RBRACE >< DATE_US > Teams() GameRecap()
Produzioni
Teams() ::= < STRINGA > < LBRACE > TeamFormation() < RBRACE >< STRINGA > < LBRACE > TeamFormation() < RBRACE >
TeamFormation()::= < LINEUP > < LBRACE > LineUp() < RBRACE >< BENCH > < LBRACE > Bench() < RBRACE >
Scope della grammatica, è un semplice container.Game definisce la data della partita e le due sezioni fondamentali: squadre e riassunto del match
Teams definisce i nomi delle due squadre (ospite e ospitante) e incapsula le loro formazioni.
TeamFormation definisce la formazione di partenza e i giocatori presenti in panchina.
07/07/2011
Luca Bueti - RunHome 9
Grammatica: FormazioniLineUp()::=Bench()::=
( Player() )*( Player() )*
Player()::= ( < POSITION > | < PREFERRED_POSITION > )< CARD_NUMBER > < STRINGA >
GameRecap()::=
Inning()::=
< FINAL > < CARD_NUMBER > < SEMICOLUMN >< CARD_NUMBER > Recap()< CARD_NUMBER> < TOP > PitchByPitch() < BOTTOM > [PitchByPitch() ]
Player definisce le informazioni base del giocatore: posizione (se giocatore è nella formazione iniziale) o posizione preferita (se in panchina), numero di maglia, nome.
GameRecap descrive il risultato finale e Recap, cioè la descrizione della partita Inning per Inning
Il secondo PitchByPitch è opzionale perché se a metà del 9° Inning (o successivi) la squadra di casa è in vantaggio, gli ospiti non avranno più la chance di segnare, quindi l’half-inning non viene giocato.
07/07/2011
Luca Bueti - RunHome 10
Grammatica: Half-InningPitchByPitch()::= < LBRACE >
( Sub() )* ( Turn() )* < RUNS > < CARD_NUMBER > < HITS > < CARD_NUMBER > < ERRORS > < CARD_NUMBER >
< RBRACE >
Sub()::= < SUB > ( < HOME_TEAM > | < GUEST_TEAM > )< CARD_NUMBER > < CARD_NUMBER >
PitchByPitch esprime quello che accade in metà inning, quando una squadra attacca e l’altra difende. In particolare definisce le sostituzioni iniziali e i diversi turni in battuta. Inoltre riassume il numero di runs, hits e errori relativi a quella metà di inning.
Sub definisce una sostituzione, della squadra di casa o di quella ospite, in cui il primo numero è quello del giocatore che esce dal campo, il secondo di quello che entra.
07/07/2011
Luca Bueti - RunHome 11
Grammatica: Turn at batTurn()::= Batter() ( Runner() )* ( Sub() )*
Pitch()::=Steal()::=
< PITCH > ( Steal() )*< STEALING > < CARD_NUMBER > < STEAL > < BASE >
Turn rappresenta gli eventi di un turno in battuta, ovvero le azioni del battitore, quelle degli eventuali corridori e le eventuali sostituzioni finali.
Per ogni battitore viene descritta la singola palla giocata (pitch) e il suo achievement finale (ad es. ‘raggiunta 1° base’).
Batter()::=Res()::=
< AT_BAT > < CARD_NUMBER > Res()( Pitch() )* BatterResult()
Pitch rappresenta la singola palla (ad es. ‘ball’ o ‘strike’ …) e include gli eventuali tentativi da parte dei corridori di rubare basi durante quel lancio.
07/07/2011
Luca Bueti - RunHome 12
Grammatica: Turn ResultBatterResult()::=
Hit()::=Base()::=
< NO_HIT > | Hit()< HOMER > | Base()< BASE > (< ERR >)?
Runner()::= < RUNNER > < CARD_NUMBER >( < RUNNER_RES > | < BASE > )
La descrizione del risultato per ogni battitore è suddivisa in più regole (battitore eliminato al piatto, battitore colpisce la palla ma viene presa al volo, battitore arriva in base con eventuale errore del fielder) per facilitare il recupero del risultato stesso in fase di valutazione.
Anche per ogni Runner viene descritto il suo achievement (ad es. ‘eliminato’ o ‘raggiunge 3° base’ …)
07/07/2011
Luca Bueti - RunHome 13
Grammatica: Osservazioni Secondo la definizione di Chomsky la
grammatica è di tipo 2, in quanto tutte le produzioni sono Context-free, cioè della forma:
La grammatica inoltre non contiene self-embedding, per cui il linguaggio generato sarà regolare.
07/07/2011
VNAVNVT *,A
Luca Bueti - RunHome 14
Struttura dell’applicazione 1/3
Scanner
Parser
AST
Serie di caratteri
Serie di token
Rappresentazione della frase
07/07/2011
CONTROLLOERRORI
SINTATTICI
Luca Bueti - RunHome 15
Struttura dell’applicazione 2/3
AST Tree Visitor
Sem Visitor
07/07/2011
CONTROLLOERRORI
SEMANTICI
Luca Bueti - RunHome 16
Struttura dell’applicazione 3/3
package gui, classi per l’interfaccia grafica
package homerun, classi che rappresentano i dati della partita
package homerunvisitor, implementazioni dei due tipi di visitor
07/07/2011
package parser, classi generate da JavaCC che implementano il parser
package syntaxtree, classi generate da JTB per rappresentare i nodi
package visitor, classi generate da JTB che definiscono l’interfaccia Visitor e alcune sue implementazioni di base
Luca Bueti - RunHome 17
GUI & Testing
Test effettuati:Inserimento di errori sintattici, ad esempio:
○ Posizione del giocatore non definita○ Data della partita nel formato sbagliato
Inserimento di errori semantici, ad esempio:○ Numero di giocatori nella formazione iniziale
diverso da 9○ Numero del giocatore “protagonista”
dell’azione non definito nella formazioneGenerazione del file HTML
Test it NOW!
07/07/2011
Luca Bueti - RunHome 18
Limiti e sviluppi futuri
Limiti:Controllo degli errori semantici migliorabileOutput HTML non personalizzabile
Possibili sviluppi futuri:Includere una descrizione delle azioni più
dettagliata (esempio, direzione della palla appena battuta, tipo di lancio del pitcher, …)
Utilizzare le informazioni raccolte per calcolare delle statistiche finali
07/07/2011
19Luca Bueti - RunHome
Grazie per l’attenzione
07/07/2011