Runhome
This presentation is the property of its rightful owner.
Sponsored Links
1 / 19

runhome PowerPoint PPT Presentation


  • 95 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Runhome

Luca Bueti

Linguaggio per la descrizione di una partita di baseball (MLB)

runhome

Progetto di Linguaggi e Modelli Computazionali LS


Obiettivi

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


Analisi del problema

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


Un esempio di base 1 2

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


Un esempio di base 2 2

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


Strumenti di sviluppo

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


Grammatica tokens

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


Grammatica partita

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


Grammatica formazioni

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


Grammatica half inning

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


Grammatica turn at bat

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


Grammatica turn result

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


Grammatica osservazioni

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


Struttura dell applicazione 1 3

Struttura dell’applicazione 1/3

Serie di caratteri

Scanner

Serie di token

CONTROLLO

ERRORI

SINTATTICI

Rappresentazione della frase

AST

Parser

Luca Bueti - RunHome


Struttura dell applicazione 2 3

Struttura dell’applicazione 2/3

Tree Visitor

AST

Sem Visitor

CONTROLLO

ERRORI

SEMANTICI

Luca Bueti - RunHome


Struttura dell applicazione 3 3

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


Gui testing

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


Limiti e sviluppi futuri

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


Grazie per l attenzione

Grazie per l’attenzione

Luca Bueti - RunHome


  • Login