4 * Created on: Aug 26, 2012
8 #ifndef LOADER_TOKENIZER_H_
9 #define LOADER_TOKENIZER_H_
21 explicit Tokenizer(std::istream &in) : in(in), isPutback(false) { }
24 Tokenizer(const Tokenizer &);
25 Tokenizer &operator =(const Tokenizer &);
32 ANGLE_BRACKET_OPEN = '{',
33 ANGLE_BRACKET_CLOSE = '}',
40 PARENTHESIS_OPEN = '(',
41 PARENTHESIS_CLOSE = ')',
46 KEYWORD_INCLUDE = 'i',
52 Token() : type(UNKNOWN), number(0) { }
53 explicit Token(Type t) : type(t), number(0) { }
61 class LexerError: public std::runtime_error {
63 explicit LexerError(const std::string &msg) : std::runtime_error(msg) { }
69 void Putback(const Token &);
76 Token ReadIdentifier();
78 bool CheckKeyword(Token &);
87 inline const char *TokenTypeToString(Tokenizer::Token::Type t) {
89 case Tokenizer::Token::ANGLE_BRACKET_OPEN:
90 return "ANGLE_BRACKET_OPEN";
91 case Tokenizer::Token::ANGLE_BRACKET_CLOSE:
92 return "ANGLE_BRACKET_CLOSE";
93 case Tokenizer::Token::CHEVRON_OPEN:
94 return "CHEVRON_OPEN";
95 case Tokenizer::Token::CHEVRON_CLOSE:
96 return "CHEVRON_CLOSE";
97 case Tokenizer::Token::COLON:
99 case Tokenizer::Token::COMMA:
101 case Tokenizer::Token::BRACKET_OPEN:
102 return "BRACKET_OPEN";
103 case Tokenizer::Token::BRACKET_CLOSE:
104 return "BRACKET_CLOSE";
105 case Tokenizer::Token::PARENTHESIS_OPEN:
106 return "PARENTHESIS_OPEN";
107 case Tokenizer::Token::PARENTHESIS_CLOSE:
108 return "PARENTHESIS_CLOSE";
109 case Tokenizer::Token::NUMBER:
111 case Tokenizer::Token::STRING:
113 case Tokenizer::Token::KEYWORD_EXPORT:
114 return "KEYWORD_EXPORT";
115 case Tokenizer::Token::KEYWORD_FALSE:
116 return "KEYWORD_FALSE";
117 case Tokenizer::Token::KEYWORD_INCLUDE:
118 return "KEYWORD_INCLUDE";
119 case Tokenizer::Token::KEYWORD_TRUE:
120 return "KEYWORD_TRUE";
121 case Tokenizer::Token::IDENTIFIER:
123 case Tokenizer::Token::TYPE_NAME:
130 inline std::ostream &operator <<(std::ostream &out, Tokenizer::Token::Type t) {
131 out << TokenTypeToString(t);
137 #endif /* LOADER_TOKENIZER_H_ */