]> git.localhorst.tv Git - l2e.git/blob - src/loader/Tokenizer.h
added tokenizer
[l2e.git] / src / loader / Tokenizer.h
1 /*
2  * Tokenizer.h
3  *
4  *  Created on: Aug 26, 2012
5  *      Author: holy
6  */
7
8 #ifndef LOADER_TOKENIZER_H_
9 #define LOADER_TOKENIZER_H_
10
11 #include <iosfwd>
12 #include <string>
13
14 namespace loader {
15
16 class Tokenizer {
17
18 public:
19         Tokenizer(std::istream &in) : in(in), isPutback(false) { }
20         ~Tokenizer() { }
21 private:
22         Tokenizer(const Tokenizer &);
23         Tokenizer &operator =(const Tokenizer &);
24
25 public:
26         struct Token {
27
28                 enum Type {
29                         UNKNOWN,
30                         ANGLE_BRACKET_OPEN = '{',
31                         ANGLE_BRACKET_CLOSE = '}',
32                         CHEVRON_OPEN = '<',
33                         CHEVRON_CLOSE = '>',
34                         COLON = ':',
35                         COMMA = ',',
36                         BRACKET_OPEN = '[',
37                         BRACKET_CLOSE = ']',
38                         NUMBER,
39                         STRING,
40                         KEYWORD_EXPORT,
41                         KEYWORD_FALSE,
42                         KEYWORD_INCLUDE,
43                         KEYWORD_TRUE,
44                         IDENTIFIER,
45                         TYPE_NAME,
46                 };
47
48                 Token() : type(UNKNOWN), number(0) { }
49                 Token(Type t) : type(t), number(0) { }
50
51                 Type type;
52                 std::string str;
53                 int number;
54
55         };
56
57         bool HasMore();
58         Token GetNext();
59         void Putback(const Token &);
60
61 private:
62         Token ReadToken();
63
64         Token ReadNumber();
65         Token ReadString();
66         Token ReadIdentifier();
67
68         bool CheckKeyword(Token &);
69
70 private:
71         std::istream &in;
72         Token putback;
73         bool isPutback;
74
75 };
76
77 }
78
79 #endif /* LOADER_TOKENIZER_H_ */