/* Calcola il valore di un'espressione aritmetica, dopo avere costruito un Abstract Syntax Tree che la rappresenta. 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 System.out.println("Notazione postfissa : " + e.toString()); //calcolo del risultato try { System.out.println("Risultato: " + e.calcola()); } catch (ArithmeticException e1) { System.err.println("Errore: divisione per zero!"); } } catch (EspressioneException e) { System.err.println(e.toString()); } } }