X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Floader%2FTokenizer.h;h=80a31693beb7e21abb19d03340964b7e08a67314;hb=d1bfdd8fcb19f27d63400109810de168d0a8ab1a;hp=7a776a450d49049e06cb98243d81b1e6a9ad5aab;hpb=7427922bc0db720e35219f7520827bd9b9db6a31;p=l2e.git diff --git a/src/loader/Tokenizer.h b/src/loader/Tokenizer.h index 7a776a4..80a3169 100644 --- a/src/loader/Tokenizer.h +++ b/src/loader/Tokenizer.h @@ -10,6 +10,7 @@ #include #include +#include #include namespace loader { @@ -17,7 +18,7 @@ namespace loader { class Tokenizer { public: - Tokenizer(std::istream &in) : in(in), isPutback(false) { } + explicit Tokenizer(std::istream &in) : in(in), isPutback(false) { } ~Tokenizer() { } private: Tokenizer(const Tokenizer &); @@ -36,6 +37,8 @@ public: COMMA = ',', BRACKET_OPEN = '[', BRACKET_CLOSE = ']', + PARENTHESIS_OPEN = '(', + PARENTHESIS_CLOSE = ')', NUMBER, STRING, KEYWORD_EXPORT, @@ -47,7 +50,7 @@ public: }; Token() : type(UNKNOWN), number(0) { } - Token(Type t) : type(t), number(0) { } + explicit Token(Type t) : type(t), number(0) { } Type type; std::string str; @@ -55,6 +58,11 @@ public: }; + class LexerError: public std::runtime_error { + public: + explicit LexerError(const std::string &msg) : std::runtime_error(msg) { } + }; + bool HasMore(); Token GetNext(); void Putback(const Token &); @@ -93,6 +101,10 @@ inline const char *TokenTypeToString(Tokenizer::Token::Type t) { return "BRACKET_OPEN"; case Tokenizer::Token::BRACKET_CLOSE: return "BRACKET_CLOSE"; + case Tokenizer::Token::PARENTHESIS_OPEN: + return "PARENTHESIS_OPEN"; + case Tokenizer::Token::PARENTHESIS_CLOSE: + return "PARENTHESIS_CLOSE"; case Tokenizer::Token::NUMBER: return "NUMBER"; case Tokenizer::Token::STRING: @@ -114,7 +126,7 @@ inline const char *TokenTypeToString(Tokenizer::Token::Type t) { } } -std::ostream &operator <<(std::ostream &out, Tokenizer::Token::Type t) { +inline std::ostream &operator <<(std::ostream &out, Tokenizer::Token::Type t) { out << TokenTypeToString(t); return out; }