ezEngine  Milestone 7
Tokenizer.h
1 #pragma once
2 
3 #include <CoreUtils/Basics.h>
4 #include <Foundation/IO/Stream.h>
5 #include <Foundation/Logging/Log.h>
6 #include <Foundation/Containers/Deque.h>
7 #include <Foundation/Strings/HashedString.h>
8 
10 struct EZ_COREUTILS_DLL ezTokenType
11 {
12  enum Enum
13  {
24  ENUM_COUNT,
25  };
26 
27  static const char* EnumNames[ENUM_COUNT];
28 };
29 
31 struct EZ_COREUTILS_DLL ezToken
32 {
33  ezToken()
34  {
35  m_iType = ezTokenType::Unknown;
36  m_uiLine = 0;
37  m_uiColumn = 0;
38  m_uiCustomFlags = 0;
39  }
40 
42  ezInt32 m_iType;
43 
45  ezUInt32 m_uiLine;
46 
48  ezUInt32 m_uiColumn;
49 
53 
55  ezUInt32 m_uiCustomFlags;
56 
59 };
60 
73 class EZ_COREUTILS_DLL ezTokenizer
74 {
75 public:
77  ezTokenizer();
78 
80  void Tokenize(const ezDynamicArray<ezUInt8>& Data, ezLogInterface* pLog);
81 
83  const ezDeque<ezToken>& GetTokens() const { return m_Tokens; }
84 
86  ezDeque<ezToken>& GetTokens() { return m_Tokens; }
87 
98  ezResult GetNextLine(ezUInt32& uiFirstToken, ezHybridArray<const ezToken*, 32>& Tokens) const;
99 
100  ezResult GetNextLine(ezUInt32& uiFirstToken, ezHybridArray<ezToken*, 32>& Tokens);
101 
102 private:
103  void NextChar();
104  void AddToken();
105 
106  void HandleUnknown();
107  void HandleString1();
108  void HandleString2();
109  void HandleLineComment();
110  void HandleBlockComment();
111  void HandleWhitespace();
112  void HandleIdentifier();
113  void HandleNonIdentifier();
114 
115  ezLogInterface* m_pLog;
116  ezTokenType::Enum m_CurMode;
117  ezStringView m_Iterator;
118  ezUInt32 m_uiCurLine;
119  ezUInt32 m_uiCurColumn;
120  ezUInt32 m_uiCurChar;
121  ezUInt32 m_uiNextChar;
122 
123  ezUInt32 m_uiLastLine;
124  ezUInt32 m_uiLastColumn;
125 
126  const char* m_szCurCharStart;
127  const char* m_szNextCharStart;
128  const char* m_szTokenStart;
129 
130  ezDeque<ezToken> m_Tokens;
132 };
133 
134