src/Lexer.h

changeset 110
7a7a53f1d51b
parent 108
6409ece8297c
child 112
def56932f938
equal deleted inserted replaced
109:6572803cd0ca 110:7a7a53f1d51b
35 class Lexer 35 class Lexer
36 { 36 {
37 types: 37 types:
38 struct Token 38 struct Token
39 { 39 {
40 EToken type; 40 TokenType type;
41 String text; 41 String text;
42 String file; 42 String file;
43 int line; 43 int line;
44 int column; 44 int column;
45 }; 45 };
50 public: 50 public:
51 Lexer(); 51 Lexer();
52 ~Lexer(); 52 ~Lexer();
53 53
54 void ProcessFile (String file_name); 54 void ProcessFile (String file_name);
55 bool GetNext (EToken req = tkAny); 55 bool GetNext (TokenType req = TK_Any);
56 void MustGetNext (EToken tok); 56 void MustGetNext (TokenType tok);
57 void MustGetAnyOf (const List<EToken>& toks); 57 void MustGetAnyOf (const List<TokenType>& toks);
58 int GEXPRSYM_tOne (const StringList& syms); 58 int GetOneSymbol (const StringList& syms);
59 void TokenMustBe (EToken tok); 59 void TokenMustBe (TokenType tok);
60 bool PeekNext (Token* tk = null); 60 bool PeekNext (Token* tk = null);
61 bool PeekNextType (EToken req); 61 bool PeekNextType (TokenType req);
62 String PeekNextString (int a = 1); 62 String PeekNextString (int a = 1);
63 String DescribeCurrentPosition(); 63 String DescribeCurrentPosition();
64 String DescribeTokenPosition(); 64 String DescribeTokenPosition();
65 65
66 static Lexer* GetCurrentLexer(); 66 static Lexer* GetCurrentLexer();
79 inline bool IsAtEnd() const 79 inline bool IsAtEnd() const
80 { 80 {
81 return mTokenPosition == mTokens.end(); 81 return mTokenPosition == mTokens.end();
82 } 82 }
83 83
84 inline EToken GetTokenType() const 84 inline TokenType GetTokenType() const
85 { 85 {
86 return GetToken()->type; 86 return GetToken()->type;
87 } 87 }
88 88
89 inline void Skip (int a = 1) 89 inline void Skip (int a = 1)
100 { 100 {
101 mTokenPosition = mTokens.begin() + pos; 101 mTokenPosition = mTokens.begin() + pos;
102 } 102 }
103 103
104 // If @tok is given, describes the token. If not, describes @tok_type. 104 // If @tok is given, describes the token. If not, describes @tok_type.
105 static inline String DescribeTokenType (EToken toktype) 105 static inline String DescribeTokenType (TokenType toktype)
106 { 106 {
107 return DescribeTokenPrivate (toktype, null); 107 return DescribeTokenPrivate (toktype, null);
108 } 108 }
109 109
110 static inline String DescribeToken (Token* tok) 110 static inline String DescribeToken (Token* tok)
115 private: 115 private:
116 TokenList mTokens; 116 TokenList mTokens;
117 Iterator mTokenPosition; 117 Iterator mTokenPosition;
118 118
119 // read a mandatory token from scanner 119 // read a mandatory token from scanner
120 void MustGetFromScanner (LexerScanner& sc, EToken tt = tkAny); 120 void MustGetFromScanner (LexerScanner& sc, TokenType tt =TK_Any);
121 void CheckFileHeader (LexerScanner& sc); 121 void CheckFileHeader (LexerScanner& sc);
122 122
123 static String DescribeTokenPrivate (EToken tok_type, Token* tok); 123 static String DescribeTokenPrivate (TokenType tok_type, Token* tok);
124 }; 124 };
125 125
126 #endif // BOTC_LEXER_H 126 #endif // BOTC_LEXER_H

mercurial