// 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);
		}
	}
}
