package calculette; import java.io.IOException; import java.io.StreamTokenizer; import java.util.HashMap; import java.util.Map; public class Calculette { private final Map operateurs = new HashMap(); public Calculette(Operateur[] ops) { for (Operateur op : ops) { ajouter(op); } } public void ajouter(Operateur op) { operateurs.put(op.symbole(), op); } public Operateur[] operateurs() { return operateurs.values().toArray(new Operateur[operateurs.size()]); } public double evaluerExpression(StreamTokenizer st) throws IOException, ErreurSyntaxiqueException { switch (st.ttype) { case StreamTokenizer.TT_NUMBER: return st.nval; case StreamTokenizer.TT_WORD: Operateur op = (Operateur) operateurs.get(st.sval); if (op == null) { throw new ErreurSyntaxiqueException(st, "Opérateur inconnu"); } double[] operandes = new double[op.arite()]; for (int i = 0; i < op.arite(); ++i) { st.nextToken(); operandes[i] = evaluerExpression(st); } return op.evaluer(operandes); default: throw new ErreurSyntaxiqueException(st); } } }