Newer
Older
libj / modules / x-tokenizer / include / tokenizer.hpp
#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