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