1
2
3
4
5
6 #include <soulng/lexer/Keyword.hpp>
7
8 namespace soulng { namespace lexer {
9
10 inline const char32_t* StrEnd(const char32_t* s)
11 {
12 while (*s)
13 {
14 ++s;
15 }
16 return s;
17 }
18
19 KeywordMap::KeywordMap(const Keyword* keywords_) : keywords(keywords_)
20 {
21 const Keyword* kw = keywords;
22 while (kw->str)
23 {
24 Lexeme lexeme(kw->str, StrEnd(kw->str));
25 keywordMap[lexeme] = kw->tokenID;
26 ++kw;
27 }
28 }
29
30 int KeywordMap::GetKeywordToken(const Lexeme& lexeme) const
31 {
32 std::map<Lexeme, int>::const_iterator it = keywordMap.find(lexeme);
33 if (it != keywordMap.cend())
34 {
35 return it->second;
36 }
37 else
38 {
39 return INVALID_TOKEN;
40 }
41 }
42
43 } }