X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fparser.h;h=0989bd9d2d1fe378920c469c845f71435d799b28;hb=29fafaa2c570b0cf92f41eeb534cfb65a841a892;hp=9b847c6675d7d397904b190355767c7b807c525f;hpb=9094bc6a657e5587e7e17827c35e3fd388fb91ec;p=libs%2Fdatafile.git diff --git a/source/parser.h b/source/parser.h index 9b847c6..0989bd9 100644 --- a/source/parser.h +++ b/source/parser.h @@ -1,42 +1,49 @@ -/* -This file is part of libmspparser -Copyright © 2006 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ -#ifndef MSP_PARSER_PARSER_H_ -#define MSP_PARSER_PARSER_H_ +#ifndef MSP_DATAFILE_PARSER_H_ +#define MSP_DATAFILE_PARSER_H_ -#include #include #include "input.h" namespace Msp { -namespace Parser { +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; + Input in; + std::string main_src; std::string src; - bool good; - - 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); + bool good; + ParserMode *mode; + +public: + Parser(IO::Base &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(bool raw = false); + +private: + void process_control_statement(const Statement &); + +public: + operator bool() const { return good && in; } }; -} // namespace Parser +} // namespace DataFile } // namespace Msp #endif