/* $Id$
This file is part of libmspdatafile
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
+Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
Distributed under the LGPL
*/
+
#ifndef MSP_DATAFILE_PARSER_H_
#define MSP_DATAFILE_PARSER_H_
namespace Msp {
namespace DataFile {
+class ParserMode;
class Statement;
struct Token;
+/**
+Frontend for loading datafiles. Handles switching between text and binary
+formats. A Parser evaluates into a boolean value indicating whether more
+statements may be read.
+*/
class Parser
{
-public:
- Parser(std::istream &, const std::string &);
- Statement parse();
- operator bool() const { return in; }
private:
Input in;
std::string src;
bool good;
+ ParserMode *mode;
+
+public:
+ Parser(std::istream &i, const std::string &s);
+ ~Parser();
+
+ /**
+ Reads a statement from the input. If the end of input was reached, an empty
+ invalid statement will be returned. If an error occurs, the parser will be
+ marked as bad and no more statements may be read, even if the exception was
+ caught.
+ */
+ Statement parse();
- Statement parse_(const Token *);
- Token parse_token();
- bool is_delimiter(int);
- bool isodigit(int);
- std::string unescape_string(const std::string &);
- std::string get_location();
- void parse_error(int, int);
+ operator bool() const { return good && in; }
};
} // namespace DataFile