#ifndef XTOKENIZER_TOKENIZER_HPP #define XTOKENIZER_TOKENIZER_HPP #include <exception> #include <vector> #include <fstream> #include <token.hpp> namespace xtokenizer { struct ParseInfo { std::vector<Token> tokens; //!< トークンリスト std::string fileName; //!< ファイル名 std::string line; //!< 解析中の行 int lineNumber; //!< 行番号 int column; //!< カラム std::ifstream inStream; ParseInfo(const char *file); ~ParseInfo(); bool readNext(); }; class ParseException : public std::logic_error { public: ParseException(const char *msg, const ParseInfo &info); ParseException(const char *msg, const Token &token); virtual ~ParseException() = default; }; class Tokenizer { public: Tokenizer(const char *file); virtual ~Tokenizer(); virtual std::vector<Token> &parse(); private: ParseInfo parseInfo; }; } // namespace xtokenizer #endif // XTOKENIZER_TOKENIZER_HPP