Laboratorio di programmazione 2001-2002
Specifiche progetto Java
Implementare un interprete e una funzione di stampa per un linguaggio minimo dato.
See:
Description
Implementare un interprete e una funzione di stampa per un linguaggio minimo dato.
Il linguaggio è imperativo e comprende le seguenti istruzioni ed espressioni.
Le istruzioni sono: while, if, assegnamento e blocco (sequenza di istruzioni).
Le espressioni sono: costanti booleane e intere, variabili, le operazioni di somma, sottrazione, moltiplicazione e divisione,
le operazioni relazionali maggiore di, minore di, uguale ed infine le operazioni condizionali and, or, not.
Le operazioni aritmetiche e quelle relazionali sono definite solo sugli interi; le operazioni condizionali solo sui booleani.
Il Linguaggio non è tipato: le variabili non devono essere dichiarate e possono contenere indifferentemente un intero o
un booleano.
I programmi si scrivono costruendo un albero di oggetti.
Ogni nodo rappresenta una entità del linguaggio (istruzione o espressione) e ha i figli che gli servono.
Ad esempio un nodo while avrà due figli uno contenente il sottoalbero che rappresenta l'espressione
da valutare e l'altro contenente il sottoalbero che rappresenta le istruzioni da ripetere.
Sui nodi dell'albero si possono eseguire due funzioni polimorfe.
La funzione di stampa produce una rappresentazione testuale del programma simile ad un sorgente.
L'interprete esegue il programma; L'input/output del programma è rappresentato dal valore delle variabili.
La specifica del progetto comprende un package it.unibo.cs.labp.progetto2001.spec che definisce tre interfacce.
Statement ed Expression che devono essere implementate rispettivamente dalle classi che rappresentano le istruzioni
e da quelle che rappresentano le espressioni del linguaggio.
L'interfaccia LanguageFactory definisce i metodi per costruire le istruzioni e le espressioni.
Ogni gruppo di studenti deve scrivere un package it.unibo.cs.labp.progetto2001.nome_gruppo contentente tutte
le classi per rappresentare le entità del linguaggio più una che si deve chiamare ALanguageFactory che deve implementare
l'interfaccia LanguageFactory.
Per costruire gli oggetti necessari per scrivere un programma è sufficiente usare i metodi definiti nella vostra ALanguageFactory
che provvede a restituire oggetti che rappresentano le entità del linguaggio nella vostra implementazione.
Esempio di programma fattoriale
Il codice Java che segue costruisce un albero che rappresenta la funzione fattoriale.
public class Test {
public static void main(String[] args) {
LanguageFactory lf = new ALanguageFactory();
Expression n = lf.createVariable("n");
Expression result = lf.createVariable("result");
Statement fatt = lf.createBlock(new Statement[] {
lf.createAssignment(n, lf.createLiteral(4)),
lf.createAssignment(result, lf.createLiteral(1)),
lf.createWhile(lf.createGreaterThan(n, lf.createLiteral(0)), lf.createBlock(new Statement[] {
lf.createAssignment(result, lf.createMultiplication(result, n)),
lf.createAssignment(n,lf.createSubtraction(n, lf.createLiteral(1)))
}))
});
fatt.prettyPrint(System.out);
fatt.execute();
System.out.println("n! = " + result);
}
}
Sulla radice fatt dell'albero vengono eseguiti i due metodi prettyPrint(System.out) e
execute() per ottenere una rappresentazione testuale del programma e per eseguirlo.
Il risultato del calcolo del fattoriale si trova nella variabile result e può essere stampato
con una semplice println(result).
n = 4;
result = 1;
while(n > 0) {
result = result * n;
n = n - 1;
}
n! = 24
Template del progetto fornito
Per vostra comodità viene fornito un template del progetto che comprende la libreria con le interfacce
da implementare (labp2001spec.jar), questa documentazione (index.html) e le directory
che vi servono per scrivere i sorgenti.
docs
api
index.html
...
lib
labp2001spec.jar
src
it
unibo
cs
labp
progetto2001
nome_gruppo
Test.java
Dovete rinominare la cartella nome_gruppo seguendo la convenzione stabilita e inserire
tutti i sorgenti delle vostre classi all'interno.
Per compilare (rispettivamente in windows o in linux):
javac -classpath lib\labp2001spec.jar;. -sourcepath src -d . src\it\unibo\cs\labp\progetto2001\nome_gruppo\Test.java
javac -classpath lib/labp2001spec.jar:. -sourcepath src -d . src/it/unibo/cs/labp/progetto2001/nome_gruppo/Test.java
Per eseguire (rispettivamente in windows o in linux):
java -cp lib\labp2001spec.jar;. it.unibo.cs.labp.progetto2001.nome_gruppo.Test
java -cp lib/labp2001spec.jar:. it.unibo.cs.labp.progetto2001.nome_gruppo.Test
Per produrre l'archivio jar da consegnare:
jar cf nome_gruppo.jar it src
Prima di spedire il file controllate con il seguente comando che sia completo
di sorgenti e classi:
jar tf nome_gruppo.jar
Copyright © 2001 Riccardo Solmi. All Rights Reserved.