html5-img
1 / 19

runhome

Luca Bueti. Linguaggio per la descrizione di una partita di baseball (MLB). runhome. Progetto di Linguaggi e Modelli Computazionali LS. Obiettivi. Progettare un linguaggio che consenta di descrivere ogni avvenimento importante di una partita di baseball

zariel
Download Presentation

runhome

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. Luca Bueti Linguaggio per la descrizione di una partita di baseball (MLB) runhome Progetto di Linguaggi e Modelli Computazionali LS

  2. Obiettivi • Progettare un linguaggio che consenta di descrivere ogni avvenimento importante di una partita di baseball • Il linguaggio dovrà essere sintetico ma facilmente comprensibile da un “addetto ai lavori” • Produrre una rappresentazione finale già utilizzabile • Pagina web HTML 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 Luca Bueti - RunHome

  4. Un esempio di base 1/2 Una delle due squadre Game { 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 } } Formazione iniziale • Texas_Rangers { • Lineup { • SS 1 E._Andrus • 3B 10 M._Young • CF 32 J._Hamilton • RF 17 N._Cruz • 2B 5 I._Kinsler • LF 7 D._Murphy • C 11 B._Molina • 1B 18 M._Moreland • P 33 C._Lee • } • Bench { • DH 27 V._Guerrero • RP 30 N._Feliz • } • } Componenti panchina Luca Bueti - RunHome

  5. Un esempio di base 2/2 Final 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 Un turno in battuta (battitore e corridori) Le due metà di un inning Luca Bueti - RunHome

  6. Strumenti di sviluppo • JavaCC • Generatore di parser top-down per grammatiche LL(k) • JTB • Utilizzato insieme a JavaCC, è un generatore di Abstract Syntax Tree • NetBeans • Ambiente di sviluppo multilinguaggio Luca Bueti - RunHome

  7. Grammatica: tokens KEYWORD (il contenuto non è rilevante in fase di valutazione) • Tokens (alcuni esempi) “STATIC FIELD” (il contenuto è rilevante ai fini della valutazione finale) < 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: ":" > | … 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. Luca Bueti - RunHome

  8. Grammatica: Partita • Produzioni < GAME > < LBRACE > Game()< RBRACE > < DATE_US > Teams() GameRecap() Scope() ::= Game() ::= Scope della grammatica, è un semplice container. Game definisce la data della partita e le due sezioni fondamentali: squadre e riassunto del match < STRINGA >< LBRACE > TeamFormation() < RBRACE > < STRINGA > < LBRACE > TeamFormation() < RBRACE > Teams() ::= Teams definisce i nomi delle due squadre (ospite e ospitante) e incapsula le loro formazioni. < LINEUP > < LBRACE > LineUp()< RBRACE > < BENCH > < LBRACE > Bench()< RBRACE > TeamFormation()::= TeamFormation definisce la formazione di partenza e i giocatori presenti in panchina. Luca Bueti - RunHome

  9. Grammatica: Formazioni (Player())* (Player() )* LineUp()::= Bench()::= Player definisce le informazioni base del giocatore: posizione (se giocatore è nella formazione iniziale) o posizione preferita (se in panchina), numero di maglia, nome. (< POSITION > |< PREFERRED_POSITION >) < CARD_NUMBER > < STRINGA > Player()::= GameRecap descrive il risultato finale e Recap, cioè la descrizione della partita Inning per Inning < FINAL > < CARD_NUMBER > < SEMICOLUMN > < CARD_NUMBER > Recap() < CARD_NUMBER> < TOP > PitchByPitch() < BOTTOM > [PitchByPitch() ] GameRecap()::= 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. Luca Bueti - RunHome

  10. Grammatica: Half-Inning • < LBRACE > • (Sub())* • ( Turn() )* • < RUNS > < CARD_NUMBER > • < HITS > < CARD_NUMBER > • < ERRORS > < CARD_NUMBER > • < RBRACE > PitchByPitch()::= 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 > ( < HOME_TEAM > | < GUEST_TEAM > ) < CARD_NUMBER > < CARD_NUMBER > Sub()::= 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. Luca Bueti - RunHome

  11. Grammatica: Turn at bat Batter() ( Runner() )* ( Sub() )* Turn()::= Turn rappresenta gli eventi di un turno in battuta, ovvero le azioni del battitore, quelle degli eventuali corridori e le eventuali sostituzioni finali. Batter()::= Res()::= < AT_BAT > < CARD_NUMBER > Res() (Pitch())*BatterResult() Per ogni battitore viene descritta la singola palla giocata (pitch) e il suo achievement finale (ad es. ‘raggiunta 1° base’). < PITCH > (Steal() )* < STEALING > < CARD_NUMBER > < STEAL > < BASE > Pitch()::= Steal()::= 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. Luca Bueti - RunHome

  12. Grammatica: Turn Result < NO_HIT > |Hit() < HOMER > |Base() < BASE > (< ERR >)? BatterResult()::= Hit()::= 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. < RUNNER > < CARD_NUMBER > (< RUNNER_RES > |< BASE > ) Runner()::= Anche per ogni Runner viene descritto il suo achievement (ad es. ‘eliminato’ o ‘raggiunge 3° base’ …) 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. Luca Bueti - RunHome

  14. Struttura dell’applicazione 1/3 Serie di caratteri Scanner Serie di token CONTROLLO ERRORI SINTATTICI Rappresentazione della frase AST Parser Luca Bueti - RunHome

  15. Struttura dell’applicazione 2/3 Tree Visitor AST Sem Visitor CONTROLLO ERRORI SEMANTICI Luca Bueti - RunHome

  16. Struttura dell’applicazione 3/3 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 package gui, classi per l’interfaccia grafica package homerun, classi che rappresentano i dati della partita package homerunvisitor, implementazioni dei due tipi di visitor 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 formazione • Generazione del file HTML Test it NOW! Luca Bueti - RunHome

  18. Limiti e sviluppi futuri • Limiti: • Controllo degli errori semantici migliorabile • Output 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 Luca Bueti - RunHome

  19. Grazie per l’attenzione Luca Bueti - RunHome

More Related