/* Calcola il valore di un'espressione aritmetica, dopo avere costruito un Abstract Syntax Tree che la rappresenta. Uso del pattern visitor. Autore: Giovanni Pighizzini - Maggio 2006 */ import lt2.calc.*; import java.io.*; public class Calcolatrice { public static void main(String[] args) throws IOException { //creazione del canale di input BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); //lettura della stringa da esaminare System.out.print("Espressione? "); String s = in.readLine(); //creazione dell'analizzatore lessicale: la stringa riferita da s //e' vista come file di input Scanner scanner = new Scanner(new StringReader(s)); //creazione dell'analizzatore sintattico che utilizza come sorgente //di token l'analizzatore lessicale creato all'istruzione precedente ParserEspressioni parser = new ParserEspressioni(scanner); try { Expr e = parser.parse(); //costruzione dell'albero //valutazione dell'albero: notazione postfissa Convertitore con = new Convertitore(); System.out.println("Notazione postfissa : " + con.converti(e)); //calcolo del risultato Interprete i = new Interprete(); try { System.out.println("Risultato: " + i.calcola(e)); } catch (ArithmeticException e1) { System.err.println("Errore: divisione per zero!"); } } catch (EspressioneException e) { System.err.println(e.toString()); } } }