Sci
Da Tesine Linguaggi e Traduttori.
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

