Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

19
RUNHOME Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS LINGUAGGIO PER LA DESCRIZIONE DI UNA PARTITA DI BASEBALL (MLB)

Transcript of Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

Page 1: 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)

Page 2: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 3: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 4: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 5: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 6: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 7: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 8: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 9: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 10: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 11: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 12: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 13: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 14: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 15: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

Luca Bueti - RunHome 15

Struttura dell’applicazione 2/3

AST Tree Visitor

Sem Visitor

07/07/2011

CONTROLLOERRORI

SEMANTICI

Page 16: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 17: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 18: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

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

Page 19: Luca Bueti Progetto di Linguaggi e Modelli Computazionali LS.

19Luca Bueti - RunHome

Grazie per l’attenzione

07/07/2011