00001 #ifndef PARSE_HPP_ 00002 #define PARSE_HPP_ 00003 00004 #include <istream> 00005 #include <locale> 00006 #include <ostream> 00007 #include <stdexcept> 00008 #include <string> 00009 00011 class parse_error : public std::runtime_error { 00012 public: 00013 parse_error(std::string const& msg) : runtime_error(msg) {} 00014 }; 00015 00017 class parser 00018 { 00019 public: 00023 parser(std::istream& input); 00024 00030 bool get_expr(double& result); 00031 00032 private: 00037 std::string charify(char c); 00042 bool get_number(double& result); 00048 bool get_primary(double& result); 00053 bool get_mult_expr(double& result); 00054 00055 std::istream& input_; 00056 std::ctype<char> const& ctype_; 00057 }; 00058 00064 void parse_loop(std::istream& input, std::ostream& output); 00065 00066 #endif