+class data_error: public std::runtime_error
+{
+private:
+ std::string source;
+ unsigned line;
+
+public:
+ data_error(const std::string &, unsigned, const std::string &);
+ data_error(const std::string &, unsigned, const std::exception &);
+ virtual ~data_error() throw() { }
+
+ const std::string &get_source() const { return source; }
+ unsigned get_line() const { return line; }
+
+private:
+ std::string make_what(const std::string &, unsigned, const std::string &);
+};
+
+
+class parse_error: public std::runtime_error