// Scheletro di codice per il progetto 2021 // In questo file NON ci deve essere nessuna dichiarazione "package" // come per esempio // // package progetto; // Questo import serve per potere usare il tester che vi forniamo. // Se non volete usare il tester, dovete rimuoverlo. import progetto2021.Helper; // Potete aggiungere qui altri "import" per usare le librerie // standard di Java (ad es. lo Scanner). import java.io.*; import java.util.Scanner; // NON modificate in nessun modo la linea seguente public class Progetto { // Qui dichiariamo delle costanti con i messaggi di output // per il programma in SuperBasic da eseguiure. // Anche se non è obbligatorio, si consiglia caldamente // di usare queste costanti nella funzione // semantica // per restituire i messaggi d'errore corretti. // Ricordate se necessario di concatenare il numero di riga corretto! static final String OK = "OK: "; static final String SYNTAX = "ERROR: syntax error in line "; static final String TIMEOUT = "ERROR: execution timeout"; static final String MAXLINEEXCEEDED = "ERROR: max code line exceeded"; static final String NONEXVBLE = "ERROR: access to non existing variable in line "; static final String UNINITVBLE = "ERROR: uninitialized variable read in line "; static final String DIVZERO = "ERROR: division by 0 in line "; static final String INVGOTO = "ERROR: invalid goto destination in line "; static final String INVEXIT = "ERROR: invalid exit destination in line "; static final String STACKOVERFLOW = "ERROR: stack overflow executing line "; static final String STACKUNDERFLOW = "ERROR: stack underflow executing line "; // Qui potete liberamente aggiungere altre funzioni / procedure. // Se volete, qui potete inserire variabili globali. // Se decidete di inserirle, dovete fare in modo che la funzione // semantica // inizializzi tali variabili **ogni volta** che viene chiamata. // Inizializzarle una volta sola nel main NON basta, visto che la // funzione verra` chiamate piu` volte. // NON modificate in nessun modo la linea seguente public static String semantica(String inputFile, int in0, int in1, int timeout) { // Qui potete inserire il vostro codice return OK + 0; } // Potete modificare il main liberamente. Potete per esempio eseguire // qualche test sulla funzione sopra, come quelli suggeriti sotto. // Ricordatevi che chi corregge il progetto NON eseguira` il vostro // main, ma i propri test. // public static void main(String[] args) { // Eseguiamo i test forniti // che saranno file chiamati test1.txt, test2.txt ecc ecc. // Usiamo per tutti i test i parametri x0 = 1, x1 = 2, timeout = 1000 int numeroTest = 27; int x0 = 1; int x1 = 2; int timeout = 1000; int i; boolean esito = true; String inputFileName = ""; for (i = 1 ; i <= numeroTest && esito ; i++) { inputFileName = "test" + i + ".txt"; // Calcoliamo l'output del programma String ourOutput = semantica(inputFileName, x0, x1, timeout); // Controlliamo che il risultato sia corretto usando la funzione dell'helper System.out.println("testing input " + inputFileName); esito = Helper.checkSemantica(inputFileName, x0, x1, timeout, ourOutput); } if (esito) { System.out.println("PASS: tutti i test hanno avuto successo!"); } else { System.out.println("FAIL: semantica() ha restituito un output errato!"); System.out.println(" il test fallito è su " + inputFileName); } } }