00001 #ifndef CALCULO_FORMULA_H
00002 #define CALCULO_FORMULA_H
00003
00004 #include <string>
00005 #include <vector>
00006 #include <map>
00007
00008 #include "simbolo.H"
00009
00010 namespace Calculo {
00011
00099 class Formula {
00100 public:
00104 Formula(std::string const& formula);
00105
00109 double valor() const;
00110
00114 void troca(Formula& outra);
00115
00116 private:
00118 typedef std::vector<Simbolo> Simbolos;
00119 typedef Simbolos::const_iterator Iterador;
00120
00126 Simbolos simbolos;
00127
00129 double valorDeFormula() const;
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00159 double valorDeExpressao(Iterador& i) const;
00160
00165 double valorDeExpressaoCondicional(Iterador& i) const;
00166
00171 double valorDeExpressaoOu(Iterador& i) const;
00172
00177 double valorDeExpressaoE(Iterador& i) const;
00178
00183 double valorDeExpressaoIgualdade(Iterador& i) const;
00184
00189 double valorDeExpressaoRelacional(Iterador& i) const;
00190
00195 double valorDeExpressaoAditiva(Iterador& i) const;
00196
00201 double valorDeExpressaoMultiplicativa(Iterador& i) const;
00202
00207 double valorDeExpressaoPotencial(Iterador& i) const;
00208
00213 double valorDeExpressaoUnaria(Iterador& i) const;
00214
00219 double valorDeExpressaoFuncional(Iterador& i) const;
00220
00226 std::vector<double> valoresDeListaDeExpressoes(Iterador& i) const;
00227
00232 double valorDeExpressaoPrimaria(Iterador& i) const;
00233
00236 double valorDeConstante(std::string const& nome) const;
00237
00240 double valorDeFuncao(std::string const& nome,
00241 std::vector<double> const& argumentos) const;
00242
00244 bool cumpreInvariante() const;
00245 };
00246
00247 }
00248
00249 #include "formula_impl.H"
00250
00251 #endif // CALCULO_ANALISE_FORMULA_H