import java.io.*; public class Calculette { private static double expression(StreamTokenizer st) throws IOException, SyntaxErrorException { st.nextToken(); switch (st.ttype) { case StreamTokenizer.TT_NUMBER: return st.nval; case '+': return expression(st) + expression(st); case '-': return expression(st) - expression(st); case '*': return expression(st) * expression(st); case '/': return expression(st) / expression(st); default: throw new SyntaxErrorException(st); } } public static double evaluer(String s) throws SyntaxErrorException, IOException { StreamTokenizer st = new StreamTokenizer(new StringReader(s)); double valeur = expression(st); if (st.nextToken() != StreamTokenizer.TT_EOF) { throw new SyntaxErrorException(st); } return valeur; } public static void main(String [] args) throws FileNotFoundException, IOException, SyntaxErrorException { BufferedReader entree = new BufferedReader(args.length >= 1 ? new FileReader(args[0]) : new InputStreamReader(System.in)); PrintWriter sortie = (args.length == 2 ? new PrintWriter(new FileWriter(args[1])) : new PrintWriter(System.out, true)); for (String s = entree.readLine(); s != null; s = entree.readLine()) { sortie.println(evaluer(s)); } sortie.close(); } }