#ifndef PARSER_H #define PARSER_H #include "expression.h" #include #include #include // parser is a singleton that creates a hierarchy of Expression nodes from an input stream // note that this parser handles bracketed expressions like 3 * ( 1 + 2 ) class Parser { private: Parser(); Parser(const Parser& p); ~Parser(); Parser& operator=(const Parser& p); typedef std::istream_iterator Tokenizer; ExpressionPtr get_add_expression(Tokenizer& tok) const; ExpressionPtr get_mult_expression(Tokenizer& tok) const; ExpressionPtr get_integer_or_bracket(Tokenizer& tok) const; bool is_numeric(const std::string& s) const; public: static Parser* get_parser(); ExpressionPtr parse(Tokenizer& tok) const; class BadInput { private: std::string msg; public: BadInput(const std::string& m = std::string()); const std::string& get_message() const; }; }; #endif