#define LOADER_TOKENIZER_H_
#include <iosfwd>
+#include <ostream>
#include <string>
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 &);
};
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;
};
+inline const char *TokenTypeToString(Tokenizer::Token::Type t) {
+ switch (t) {
+ case Tokenizer::Token::ANGLE_BRACKET_OPEN:
+ return "ANGLE_BRACKET_OPEN";
+ case Tokenizer::Token::ANGLE_BRACKET_CLOSE:
+ return "ANGLE_BRACKET_CLOSE";
+ case Tokenizer::Token::CHEVRON_OPEN:
+ return "CHEVRON_OPEN";
+ case Tokenizer::Token::CHEVRON_CLOSE:
+ return "CHEVRON_CLOSE";
+ case Tokenizer::Token::COLON:
+ return "COLON";
+ case Tokenizer::Token::COMMA:
+ return "COMMA";
+ case Tokenizer::Token::BRACKET_OPEN:
+ return "BRACKET_OPEN";
+ case Tokenizer::Token::BRACKET_CLOSE:
+ return "BRACKET_CLOSE";
+ case Tokenizer::Token::NUMBER:
+ return "NUMBER";
+ case Tokenizer::Token::STRING:
+ return "STRING";
+ case Tokenizer::Token::KEYWORD_EXPORT:
+ return "KEYWORD_EXPORT";
+ case Tokenizer::Token::KEYWORD_FALSE:
+ return "KEYWORD_FALSE";
+ case Tokenizer::Token::KEYWORD_INCLUDE:
+ return "KEYWORD_INCLUDE";
+ case Tokenizer::Token::KEYWORD_TRUE:
+ return "KEYWORD_TRUE";
+ case Tokenizer::Token::IDENTIFIER:
+ return "IDENTIFIER";
+ case Tokenizer::Token::TYPE_NAME:
+ return "TYPE_NAME";
+ default:
+ return "UNKNOWN";
+ }
+}
+
+inline std::ostream &operator <<(std::ostream &out, Tokenizer::Token::Type t) {
+ out << TokenTypeToString(t);
+ return out;
+}
+
}
#endif /* LOADER_TOKENIZER_H_ */