]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/Tokenizer.h
added missing parentheses tokens
[l2e.git] / src / loader / Tokenizer.h
index 7a776a450d49049e06cb98243d81b1e6a9ad5aab..80a31693beb7e21abb19d03340964b7e08a67314 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <iosfwd>
 #include <ostream>
+#include <stdexcept>
 #include <string>
 
 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;
 }