Sci

Da Tesine Linguaggi e Traduttori.

Jump to: navigation, search

Contents

Introduzione

Il progetto ha come obbiettivo la gestione di un sistema di prenotazione di sci e tavole da neve. Da un file di testo in ingresso viene letta la lista degli sci e delle tavole presenti nel magazzino, la lista delle persone che effettuano la prenotazione ed un insieme di regole che permette di associare ad ogni persona un sci o una tavola con determinate caratteristiche. Viene quindi riportato in output l’elenco delle prenotazioni con i relativi sci o tavola assegnate ed alcune statistiche.


Il file di input

Il file di ingresso è suddiviso in tre parti, separate da 4 simboli di controllo,

-%-    -!-    -.-    ---


Nella prima parte è presente la lista di sci e tavole presente nel magazzino con i relativi parametri:

Sci: Marca="Atomic" Lunghezza="140" Codice="AA00"
Tavola: Marca="Burton" Lunghezza="140" Codice="BB00"

Devono essere presenti tutti gli attributi Marca, Lunghezza, Codice, ed il programma verifica la correttezza di questi attributi: Lunghezza deve essere un numero ed il Codice deve essere univoco.


Nella seconda parte sono presenti le prenotazioni con i relativi parametri:

Prenotazione: Cognome="Colombo" Nome="Aldo" Altezza="180" Peso="70" Sesso="M" ST="T" Difficolta="Principiante" Marca="Burton" Lunghezza="180"

Tutti gli attributi sono obbligatori tranne Marca e Lunghezza. Anche in questo caso verifico i valori numerici, il parametro ST che deve valere S (sci) o T (tavola) ed il parametro sesso che deve valere M o F.


Nell’ultima parte invece sono presenti una lista di regole che permettono di assegnare ad ogni prenotazione uno sci o tavola, in base al sesso, peso, altezza e difficoltà.


Implementazione

Il progetto è composto da diversi file:

  • scanner.jflex compie un analisi lessicale del linguaggio di input specificato in precedenza
  • parser.cup contiene l'implementazione del parser in Cup, effettua l'analisi sintattica del testo (sulla base della grammatica specificata), ed esegue le azioni semantiche per produrre l'output desiderato
  • Tool.java contiene l’oggetto tool che rappresenta uno sci o una tavola con i relativi attributi
  • Persona.java contiene l’oggetto persona che rappresenta una prenotazione con i relativi attributi
  • Operazione.java contiene l’oggetto operazione che rappresenta i parametri delle operazioni lette nella terza parte.


In una prima fase il programma legge la lista degli sci e delle tavole, controlla se sono valide e per ognuna di esse crea un oggetto Tool e lo inserisce in una lista.

In una seconda fase il programma legge invece la lista delle prenotazioni, controlla se sono valide e per ognuna di esse crea un oggetto Persona e lo inserisce in una lista.

Nell’ultima fase viene letta la sequenza delle operazioni da svolgere e vengono salvati i parametri in una lista di oggetti Operazione. Quando il file di ingresso è riconosciuto correttamente allora si esegue l’assegnazione: per ogni persona viene calcolato il PesoIdeale e quindi la lunghezza degli sci o tavole. Viene quindi ricercato se è disponibile uno sci o tavola con quelle caratteristiche e se presente lo sci o tavola viene marchiato come prenotato e viene assegnato alla prenotazione il codice dello sci o tavola che è univoco.

L’operazione può anche fallire: vuol dire che non è disponibile nessun sci o tavola con quelle caratteristiche. Se nella prenotazione sono presenti i parametri facoltativi Marca e Lunghezza vengono utilizzati per la ricerca dello sci o tavola adatto.

Limiti

Il limite di questo programma risiede nella terza parte: la sequenza di operazione per l’assegnazione degli sci è fissa, quello che si può cambiare sono i valori numerici. Ho scelto questa implementazione perché l’algoritmo di scelta è fisso, non si può modificare.


Gestione errore semantici e sintattici

Il programma compie numerosi controlli sugli errori: innanzi tutto è controllata la presenza delle tre parti: lista sci o tavola, lista persone e regole. Se una parte manca il programma ovviamente termina.

Viene poi verificata la presenza di tutti i parametri, se per caso qualcuno manca, o se la riga non è riportata correttamente il programma segnala l’errore, la riga viene scartata ma l’esecuzione continua.

Viene anche controllato il valore dei parametri, ad esempio Sesso M F, ST S T, il valore peso, lunghezza, codice, altezza e difficoltà: in caso di errore viene semplicemente scartata le riga ma l’esecuzione del programma continua.

Con il programma vengono forniti diversi testi di esempio che forniscono errori: Testo.txt è l’originale, tutti gli altri causano errore.

Note per la compilazione

La compilazione richiede una macchina con java, jflex e cup installati.
Si consigli di ingrandire il più possibile il terminale per avere un output correttamente formattato.

Su UNIX per:

Compilare 	./sistema –compila
Eseguire 	./sistema –esegui Testo.txt
Pulire		./sistema –pulisci


Altrimenti per Win e per Unix eseguire i comandi:

jflex scanner.jflex
java java_cup.Main parser.cup
javac Operazione.java Tool.java Persona.java Lexer.java sym.java parser.java Main.java
java Main Testo.txt

Download sorgenti progetto: Sci.zip

Personal tools