| 49 |
49 |
| 50 public: |
50 public: |
| 51 Lexer(); |
51 Lexer(); |
| 52 ~Lexer(); |
52 ~Lexer(); |
| 53 |
53 |
| 54 void ProcessFile (String file_name); |
54 void processFile (String fileName); |
| 55 bool Next (ETokenType req = TK_Any); |
55 bool next (ETokenType req = TK_Any); |
| 56 void MustGetNext (ETokenType tok); |
56 void mustGetNext (ETokenType tok); |
| 57 void MustGetAnyOf (const List<ETokenType>& toks); |
57 void mustGetAnyOf (const List<ETokenType>& toks); |
| 58 int GetOneSymbol (const StringList& syms); |
58 int getOneSymbol (const StringList& syms); |
| 59 void TokenMustBe (ETokenType tok); |
59 void tokenMustBe (ETokenType tok); |
| 60 bool PeekNext (TokenInfo* tk = null); |
60 bool peekNext (TokenInfo* tk = null); |
| 61 bool PeekNextType (ETokenType req); |
61 bool peekNextType (ETokenType 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(); |
| 67 |
67 |
| 68 inline bool HasValidToken() const |
68 inline bool hasValidToken() const |
| 69 { |
69 { |
| 70 return (mTokenPosition < mTokens.end() && mTokenPosition >= mTokens.begin()); |
70 return (m_tokenPosition < m_tokens.end() && m_tokenPosition >= m_tokens.begin()); |
| 71 } |
71 } |
| 72 |
72 |
| 73 inline TokenInfo* Token() const |
73 inline TokenInfo* token() const |
| 74 { |
74 { |
| 75 assert (HasValidToken() == true); |
75 assert (hasValidToken() == true); |
| 76 return &(*mTokenPosition); |
76 return &(*m_tokenPosition); |
| 77 } |
77 } |
| 78 |
78 |
| 79 inline bool IsAtEnd() const |
79 inline bool isAtEnd() const |
| 80 { |
80 { |
| 81 return mTokenPosition == mTokens.end(); |
81 return m_tokenPosition == m_tokens.end(); |
| 82 } |
82 } |
| 83 |
83 |
| 84 inline ETokenType TokenType() const |
84 inline ETokenType tokenType() const |
| 85 { |
85 { |
| 86 return Token()->type; |
86 return token()->type; |
| 87 } |
87 } |
| 88 |
88 |
| 89 inline void Skip (int a = 1) |
89 inline void skip (int a = 1) |
| 90 { |
90 { |
| 91 mTokenPosition += a; |
91 m_tokenPosition += a; |
| 92 } |
92 } |
| 93 |
93 |
| 94 inline int Position() |
94 inline int position() |
| 95 { |
95 { |
| 96 return mTokenPosition - mTokens.begin(); |
96 return m_tokenPosition - m_tokens.begin(); |
| 97 } |
97 } |
| 98 |
98 |
| 99 inline void SetPosition (int pos) |
99 inline void setPosition (int pos) |
| 100 { |
100 { |
| 101 mTokenPosition = mTokens.begin() + pos; |
101 m_tokenPosition = m_tokens.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 (ETokenType toktype) |
105 static inline String describeTokenType (ETokenType toktype) |
| 106 { |
106 { |
| 107 return DescribeTokenPrivate (toktype, null); |
107 return describeTokenPrivate (toktype, null); |
| 108 } |
108 } |
| 109 |
109 |
| 110 static inline String DescribeToken (TokenInfo* tok) |
110 static inline String describeToken (TokenInfo* tok) |
| 111 { |
111 { |
| 112 return DescribeTokenPrivate (tok->type, tok); |
112 return describeTokenPrivate (tok->type, tok); |
| 113 } |
113 } |
| 114 |
114 |
| 115 private: |
115 private: |
| 116 TokenList mTokens; |
116 TokenList m_tokens; |
| 117 Iterator mTokenPosition; |
117 Iterator m_tokenPosition; |
| 118 |
118 |
| 119 // read a mandatory token from scanner |
119 // read a mandatory token from scanner |
| 120 void MustGetFromScanner (LexerScanner& sc, ETokenType tt =TK_Any); |
120 void mustGetFromScanner (LexerScanner& sc, ETokenType tt =TK_Any); |
| 121 void CheckFileHeader (LexerScanner& sc); |
121 void checkFileHeader (LexerScanner& sc); |
| 122 |
122 |
| 123 static String DescribeTokenPrivate (ETokenType tok_type, TokenInfo* tok); |
123 static String describeTokenPrivate (ETokenType tok_type, TokenInfo* tok); |
| 124 }; |
124 }; |
| 125 |
125 |
| 126 #endif // BOTC_LEXER_H |
126 #endif // BOTC_LEXER_H |