Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoValerio Esposito Modificato 10 anni fa
1
runhome Progetto di Linguaggi e Modelli Computazionali LS Luca Bueti
Linguaggio per la descrizione di una partita di baseball (MLB) 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 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/2 Una delle due squadre Formazione iniziale
Game { 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 07/07/2011 Luca Bueti - RunHome
5
Un turno in battuta (battitore e corridori)
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 07/07/2011 Luca Bueti - RunHome
6
Strumenti di sviluppo JavaCC JTB NetBeans
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 07/07/2011 Luca Bueti - RunHome
7
Grammatica: tokens Tokens (alcuni esempi) 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. 07/07/2011 Luca Bueti - RunHome
8
Grammatica: Partita Produzioni Scope() ::=
Game() ::= < GAME > < LBRACE > Game() < RBRACE > < DATE_US > Teams() GameRecap() Scope della grammatica, è un semplice container. Game definisce la data della partita e le due sezioni fondamentali: squadre e riassunto del match Teams() ::= < STRINGA > < LBRACE > TeamFormation() < RBRACE > Perché non PlayerList()? Teams definisce i nomi delle due squadre (ospite e ospitante) e incapsula le loro formazioni. TeamFormation()::= < LINEUP > < LBRACE > LineUp() < RBRACE > < BENCH > < LBRACE > Bench() < RBRACE > TeamFormation definisce la formazione di partenza e i giocatori presenti in panchina. 07/07/2011 Luca Bueti - RunHome
9
Grammatica: Formazioni
LineUp()::= Bench()::= ( Player() )* Player definisce le informazioni base del giocatore: posizione (se giocatore è nella formazione iniziale) o posizione preferita (se in panchina), numero di maglia, nome. Player()::= ( < POSITION > | < PREFERRED_POSITION > ) < CARD_NUMBER > < STRINGA > GameRecap descrive il risultato finale e Recap, cioè la descrizione della partita Inning per Inning GameRecap()::= Inning()::= < FINAL > < CARD_NUMBER > < SEMICOLUMN > < CARD_NUMBER > Recap() < CARD_NUMBER> < TOP > PitchByPitch() < BOTTOM > [PitchByPitch() ] 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-Inning
PitchByPitch()::= < LBRACE > ( Sub() )* ( Turn() )* < RUNS > < CARD_NUMBER > < HITS > < CARD_NUMBER > < ERRORS > < CARD_NUMBER > < RBRACE > 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()::= < SUB > ( < HOME_TEAM > | < GUEST_TEAM > ) < CARD_NUMBER > < CARD_NUMBER > 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 bat
Batter() ( Runner() )* ( Sub() )* 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()::= < PITCH > ( Steal() )* < STEALING > < CARD_NUMBER > < STEAL > < BASE > 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 Result
BatterResult()::= Hit()::= Base()::= < NO_HIT > | Hit() < HOMER > | Base() < BASE > (< ERR >)? 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()::= < RUNNER > < CARD_NUMBER > ( < RUNNER_RES > | < BASE > ) 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 Luca Bueti - RunHome
14
Struttura dell’applicazione 1/3
Serie di caratteri Scanner CONTROLLO ERRORI SINTATTICI Serie di token Rappresentazione della frase AST Parser 07/07/2011 Luca Bueti - RunHome
15
Struttura dell’applicazione 2/3
Tree Visitor AST Sem Visitor CONTROLLO ERRORI SEMANTICI 07/07/2011 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 07/07/2011 Luca Bueti - RunHome
17
GUI & Testing Test it NOW! 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! 07/07/2011 Luca Bueti - RunHome
18
Limiti e sviluppi futuri
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 07/07/2011 Luca Bueti - RunHome
19
Grazie per l’attenzione
07/07/2011 Luca Bueti - RunHome
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.