Linguaggi e Modelli Computazionali LS Anno Accademico 2007/2008 Alessio Della Motta Un linguaggio per descrivere partite di Maraffone: il gioco più popolare.

Slides:



Advertisements
Presentazioni simili
I Linguaggi di programmazione
Advertisements

Evoluzione dei linguaggi di programmazione
PHP.
Analizzatori Sintattici con Cup Giuseppe Morelli.
Universita di Camerino
Semantica operazionale
Esercitazione con socket
PROGETTO PROMOSSO DALLASSOCIAZIONE COLLABORANDO OBIETTIVI DEL CORSO: dare spazio alla generosità e allesperienza degli anziani permettendo loro lincontro.
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
POKER ISOLABELLA SIMONE TAGLIAFICO ALESSIO TAGLIABUE FARIS
Regole e punteggio della mano. Scopo del gioco Comunemente lo scopo del Blackjack è quello di sconfiggere il banco facendo un punteggio di 21 o molto.
UML: Esempio “Briscola” Corso IS I /03
La Riflessione computazione Elisa Ferrando. Cos è la Riflessione La Riflessione Sistema riflessivo Sistema computazionale.
Unità Didattica 2 I Linguaggi di Programmazione
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
LINGUAGGI DI PROGRAMMAZIONE
AN FI Concetti. Linguaggi di alto livello u Hanno capacita' espressive superiori a quelle del linguaggio macchina u Suggeriscono concetti e modi.
M.A.E.A.I. Mobile Agent and Enterprise Architecture Integration Il gestore delle politiche Valerio Siri Reti di Calcolatori LS Docente: Antonio Corradi.
Progetto per lesame di Linguaggi e Modelli Computazionali LS Chiara Chiara Gualtieri.
ANTLR V.3 Renzi Alberto.
Progetto desame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti.
Centro di Assistenza Multicanale (C.A.M.) di Cagliari
Linguaggi e Modelli Computazionali LS - Prof E.Denti
CineMan Linguaggio per la descrizione della programmazione di cinema
Corso di Laurea Specialistica in Ingegneria Informatica Itinerari aerei Progetto per lesame di Linguaggi e Modelli Computazionali LS realizzato da Stefano.
Progetto di Reti di Calcolatori L-S Orchestrazione di servizi WEB
S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari.
Linguaggio per la generazione di biglietti da visita
Gianfranco Zampolini Progetto per il corso di: Linguaggi e Modelli Computazionali LS EM Linguaggio per la Descrizione di un Evento Musicale.
Corso di Laurea Specialistica in Ingegneria Informatica Model Drive Applicazione per il pilotaggio di veicoli Esame di Linguaggi e Modelli computazionali.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Lo sviluppo del software e i linguaggi di programmazione
Linguaggi e modelli computazionali LS
Progetto di un linguaggio e interprete per giocare a MemoryPlus Progetto di:Docente: Vito La PortaEnrico Denti.
runhome Progetto di Linguaggi e Modelli Computazionali LS Luca Bueti
Corso di Laurea Specialistica in Ingegneria Informatica Previsione dei Consumi Elettrici = Progetto per lesame di Linguaggi e Modelli Computazionali LS.
Un linguaggio ed un interprete per il gioco Citadels
Progetto Fireworks Simulatore di spettacoli pirotecnici
Tablabla Progetto di Valent Cristina
SQL File Manager un nuovo modo di gestire il filesystem….
Università degli Studi di Bologna Facoltà di Ingegneria Anno Accademico 2007/2008 Laurea Specialistica in Ingegneria Informatica Linguaggi e Modelli Computazionali.
Chess Game Visualizer Un interprete per Short Algebraic Notation Progetto per lesame di Linguaggi e modelli computazionali LS prof. Denti – A.A. 2007/08.
Linguaggi e modelli computazionali LS Manni Tiziano
ATTIVITÀ PROGETTUALE LINGUAGGI E MODELLI COMPUTAZIONALI L-M Un linguaggio per la descrizione di coreografie giocabili STUDENTE: BACCHILEGA SIMONE A.A 2013/2014.
Università degli Studi di Napoli Parthenope programmazione III.
Tecnologie di InternetDocument Type Definition Dott. Nicola Dragoni Document Type Definition  Document Type Definition (DTD)  Documento XML valido 
1 Interpretazione astratta: un approccio sistematico all’analisi statica.
DRAUGHTS Linguaggi e Modelli Computazionali LS Linguaggio e interprete per effettuare una partita di dama inglese contro un’intelligenza artificiale Progetto.
Giannicola Spezzigu Accordo: sovrapposizione di 3 o più suoni Ogni sigla denota un accordo, ossia i suoni da cui esso è formato Accordi e.
Trading EToro Un linguaggio per descrivere e gestire operazioni di borsa Progetto di Linguaggi e Modelli Computazionali LS Prof. Enrico Denti Mancini Laura.
DerIntCalculator La calcolatrice per integrali e derivate Progetto di Linguaggi e Modelli Computazionali M Prof. Enrico Denti Realizzato da: Gabriella.
Reti di calcolatori LS1 Service Middleware Reti di calcolatori LS progetto di Andrea Belardi Infrastruttura dedicata alla gestione di servizi disponibili.
CAKE Ambiente per la scrittura e la riproduzione audio di ricette per torte Linguaggi e Modelli Computazionali LSElisabetta Visciotti.
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
Reti di Calcolatori LS - Fabio Poli 15 Giugno 2006 Sviluppo di un player di Campo Minato multigiocatore con supporto di Chat MultiCast.
Automi temporizzati.
Eye Computer Sistema per l'interazione con un computer dotato di controllo oculare Linguaggi e modelli computazionali LS Realizzato da: Ciavarella Primiano.
Problemi, algoritmi e programmazione
Quattro giocatori seduti al tavolo. Il primo giocatore distribuisce 10 carte a testa. Il secondo giocatore inizia la partita e può scartare qualsiasi carta.
LABORATORIO DI DOCIMOLOGIA E VALUTAZIONE DELL’APPRENDIMENTO PERMANENTE CORSO DI LAUREA FSRU Prof. Cinzia Angelini Università Roma Tre Anno accademico
Elementi di calcolo combinatorio e di probabilità. Prof. Ugo Morra Liceo scientifico V. Vecchi di Trani Lezione di potenziamento delle abilità in matematica.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Metodi in Java. Note Identificazione input: (il raggio è un numero reale !!!) Identificazione delle operazioni necessarie al calcolo Area=r*r*PI Circonferenza=2*r*PI.
ALGORITMI, LINGUAGGI E PROGRAMMI Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Transcript della presentazione:

Linguaggi e Modelli Computazionali LS Anno Accademico 2007/2008 Alessio Della Motta Un linguaggio per descrivere partite di Maraffone: il gioco più popolare in Romagna!

Sviluppare un semplice linguaggio che permetta la descrizione dello svolgimento di una partita di Maraffone, un gioco di carte molto diffuso in Romagna. Realizzare un valutatore o interprete in grado di calcolare i punteggi parziali e complessivi della partita, controllando al contempo il corretto svolgimento delle diverse fasi e dei turni di gioco.

G = VT Insieme dei simboli terminali o token. VN Insieme dei simboli non-terminali. P Insieme delle produzioni della grammatica. S Scopo della grammatica.

Le produzioni della grammatica sono nella forma: A ::= α, A Є VN, α Є (VT U VN)*. La grammatica è di Tipo 2 (context-free) secondo la classificazione di Chomsky. La grammatica non contiene Self-Embedding, perciò il linguaggio generato sarà di Tipo 3 (regolare). LL(1), così da garantire il determinismo dell’analisi ricorsiva discendente.

| "0"> ( )*> ( | )*> <VALORE_CARTA: "Tre" | "Due" | "Asso" | "Re" | "Cavallo" | "Fante" | "Sette" | "Sei" | "Cinque" | "Quattro"> Tokens per nomi e numeri: Tokens per carte e dichiarazioni:

Scopo S della grammatica: Scope ::= "MARAFFONE" "{" Coppie Soglia ( Partita )+ "}" Il linguaggio deve contenere forzatamente le indicazioni delle squadre, della soglia ed una o più partite. Questa scelta è dovuta al fatto che non esiste un Maraffone senza due squadre ed almeno una partita. Descrizione delle coppie, della soglia e delle partite: Coppie ::= "COPPIE:" "&" "," "&" "." Soglia ::= "SOGLIA:" "." Partita ::= "PARTITA" "{" DistribuzioneCarte Briscola Mani "}" Per quanto riguarda le parentesi graffe, non vi è self-embedding: una sola parentesi iniziale ed una sola finale in entrambi i casi. Nessun livello di nesting di cui tenere conto.

Distribuzione delle carte ai giocatori: DistribuzioneCarte ::= "DISTRIBUZIONE CARTE:" Consegna ";" Consegna ";" Consegna ";" Consegna "." Consegna ::= "RICEVE" ListaCarteRicevute ListaCarteRicevute ::= CartaRomagnola "," CartaRomagnola "," CartaRomagnola "," CartaRomagnola "," CartaRomagnola "," CartaRomagnola "," CartaRomagnola Decisione della briscola: Briscola ::= "BRISCOLA DECISA DA" "A" "." Ogni giocatore deve ricevere esattamente 10 carte, non una di più e non una di meno...

Descrizione delle mani di una partita: Mani ::= Mano Mano Mano Mano Mano Mano Mano Mano Mano Mano Mano ::= "MANO:" GiocataDiMano "," Giocata "," Giocata "," Giocata "." CartaRomagnola ::= "di" GiocataDiMano ::= ( "DICHIARA" )? "GIOCA" CartaRomagnola Giocata ::= "GIOCA" CartaRomagnola Le mani in una partita devono essere obbligatoriamente dieci. Solo il giocatore di mano (ovvero il primo a giocare nella mano) può decidere se fare o meno una dichiarazione.

La grammatica può non essere elegante in alcuni suoi punti, ad esempio la produzione: Mani → Mano Mano... Mano. – Possibile alternativa: Mani → (Mano)+ In questo caso, però, la struttura sintattica del linguaggio si correla direttamente ad un requisito semantico ben preciso (ovvero il fatto che occorrano dieci mani per fare una partita). Per questo motivo si è deciso di specificare dieci volte il non-terminale Mano, rendendo così sintatticamente errate frasi che descrivano partite con un numero di mani diverso da dieci. Non sono presenti ε-rules e si verifica facilmente come gli starter-set siano disgiunti, rendendo così la grammatica LL(1).

Linguaggio: Java (jdk1.6.0_03). Ambiente di sviluppo: NetBeans IDE 6.0. Generazione automatica parser: JavaCC 4.0. Generazione classi che rappresentano l’albero sintattico ed implementazione di Visitor generici che effettuano la visita depth-first: Java Tree Builder

Il package Parser è stato generato in automatico da JavaCC; i package Visitor e SyntaxTree sono stati generati da JTB; il package GUI è stato parzialmente implementato da NetBeans IDE.

Classe CircularList generica che estende la classe Vector e implementa le funzionalità di una coda circolare. Sarà utile al gestore dei turni (vedi dopo). Enumerativi Seme e ValoreCarta per descrivere una carta, che sarà rappresentata dall’omonima classe Carta. Un’eccezione apposita MaraffoneException scatenata da errori semantici che possono avvenire durante la valutazione.

Un giocatore è rappresentato da un’istanza della classe Giocatore, al quale durante un Maraffone saranno assegnate diverse mandate di carte (una per ogni partita) rappresentate anch’esse dall’apposita classe Mandata. Una Squadra è composta da due giocatori e mantiene un certo insieme di carte che saranno quelle accumulate durante una specifica partita. L’ambiente di gioco è rappresentato dalla classe Tavolo, tramite la quale sarà possibile svolgere tutte le azioni semantiche necessarie: ad esempio la giocata di una carta da parte di un giocatore, la dichiarazione della briscola, la presa di una squadra e così via. La classe Tavolo contiene un GestoreTurno al quale è delegato il compito di gestire il corretto ordine di gioco dei giocatori.

MaraffoneVisitor: – Percorre l’albero ed istanzia tutti gli oggetti necessari (giocatori, squadre, ecc.), tra cui un Tavolo che rappresenterà l’ambiente di gioco. Tramite questo si eseguiranno tutte le operazioni di gioco, facendo i necessari controlli semantici, e si otterranno i risultati parziali e complessivi del Maraffone. MaraffoneTreeVisitor: – Costruisce una struttura a TreeNode atta a rappresentare l’albero sintattico. Non vengono fatti controlli semantici, quindi se un testo è conforme alla sintassi del linguaggio e non alla semantica del gioco, l’albero verrà generato ugualmente. Sono stati implementati due visitor per ottenere due distinte interpretazioni:

Risultato della visita del visitor MaraffoneVisitor Risultato della visita del visitor MaraffoneTreeVisitor

Alcuni test utilizzando JUnit. – Ad esempio per testare il funzionamento della classe CircularList. Un maggior numero di Test operativi tramite esempi costruiti ad-hoc, in modo da osservare se il linguaggio gestiva correttamente le varie tipologie di situazioni anomale.

Non sono state implementate esattamente tutte le regole, come ad esempio l’obbligo ci chiamare la briscola o la possibilità di chiamarsi fuori. Non ci sono controlli sulla veridicità delle dichiarazioni del primo giocatore di una mano, anche se ciò non è strettamente necessario in quanto un giocatore può bluffare. Linguaggio verboso; sarebbero utili tool di generazione automatica (possibilmente in modo grafico) di testi del linguaggio. Implementazione del gioco via rete, ad esempio tramite quattro client ed un server centrale che, mano a mano che il gioco avanza, compila un testo del linguaggio e genera i risultati alla fine della partita.