@@ -15,19 +15,21 @@ Token::Token()
1515{
1616}
1717// -----------------------------------------------------------------------------
18- Token::Token (const ETokenClass c, const std::string& s, size_t l, size_t col)
18+ Token::Token (const ETokenClass c, const std::string& s, size_t l, size_t col, size_t i )
1919 : type(c)
2020 , value(s)
2121 , line(l)
2222 , column(col)
23+ , index(i)
2324{
2425}
2526// -----------------------------------------------------------------------------
26- Token::Token (const ETokenClass c, const char s, size_t l, size_t col)
27+ Token::Token (const ETokenClass c, const char s, size_t l, size_t col, size_t i )
2728 : type(c)
2829 , value()
2930 , line(l)
3031 , column(col)
32+ , index(i)
3133{
3234 value.push_back (s);
3335}
@@ -151,61 +153,64 @@ bool Tokenizer::tokenize(std::istream& os)
151153 } else {
152154 _tokens.emplace_back (ETokenClass::Symbol, cur, current_line, current_column);
153155 }
154- }
155- else if (cur == ' \n ' ) {
156+ } else if (cur == ' \n ' ) {
157+ workItem. index = _tokens. size ();
156158 _tokens.push_back (workItem);
157- _tokens.emplace_back (ETokenClass::Newline, cur, current_line, current_column);
159+ _tokens.emplace_back (ETokenClass::Newline, cur, current_line, current_column, _tokens. size () );
158160 workItem = Token ();
159- }
160- else if ( workItem.type != ETokenClass::Whitespace && std::isspace (cur)) {
161+ } else if (workItem. type != ETokenClass::Whitespace && std::isspace (cur)) {
162+ workItem.index = _tokens. size ();
161163 _tokens.push_back (workItem);
162- workItem = Token (ETokenClass::Whitespace, cur, current_line, current_column);
163- }
164- else if (cur == ' # ' ) {
164+ workItem = Token (ETokenClass::Whitespace, cur, current_line, current_column, _tokens. size () );
165+ } else if (cur == ' # ' ) {
166+ workItem. index = _tokens. size ();
165167 _tokens.push_back (workItem);
166168 workItem = Token ();
167169 break ;
168- }
169- else if (workItem.type == ETokenClass::Whitespace) {
170+ } else if (workItem.type == ETokenClass::Whitespace) {
170171 if (std::isspace (cur)) {
171172 workItem.value .push_back (cur);
172173 } else if (std::isalpha (cur)) {
174+ workItem.index = _tokens.size ();
173175 _tokens.push_back (workItem);
174176 workItem = Token{ ETokenClass::Word, cur, current_line, current_column };
175177 } else if (std::isdigit (cur)) {
178+ workItem.index = _tokens.size ();
176179 _tokens.push_back (workItem);
177180 workItem = Token{ ETokenClass::Number, cur, current_line, current_column };
178181 } else {
182+ workItem.index = _tokens.size ();
179183 _tokens.push_back (workItem);
180- _tokens.emplace_back (ETokenClass::Symbol, cur, current_line, current_column);
184+ _tokens.emplace_back (ETokenClass::Symbol, cur, current_line, current_column, _tokens. size () );
181185 workItem = Token ();
182186 }
183- }
184- else if (workItem.type == ETokenClass::Number) {
187+ } else if (workItem.type == ETokenClass::Number) {
185188 if (std::isdigit (cur)) {
186189 workItem.value .push_back (cur);
187190 } else if (std::isalnum (cur)) {
188191 workItem.value .push_back (cur);
189192 workItem.type = ETokenClass::Word;
190193 } else {
194+ workItem.index = _tokens.size ();
191195 _tokens.push_back (workItem);
192- _tokens.emplace_back (ETokenClass::Symbol, cur, current_line, current_column);
196+ _tokens.emplace_back (ETokenClass::Symbol, cur, current_line, current_column, _tokens. size () );
193197 workItem = Token ();
194198 }
195- }
196- else if (workItem.type == ETokenClass::Word) {
199+ } else if (workItem.type == ETokenClass::Word) {
197200 if (std::isalnum (cur)) {
198201 workItem.value .push_back (cur);
199202 } else if (cur == ' _' ) {
200203 workItem.value .push_back (cur);
201204 } else {
205+ workItem.index = _tokens.size ();
202206 _tokens.push_back (workItem);
203- _tokens.emplace_back (ETokenClass::Symbol, cur, current_line, current_column);
207+ _tokens.emplace_back (ETokenClass::Symbol, cur, current_line, current_column, _tokens. size () );
204208 workItem = Token ();
205209 }
206210 }
207211 }
208212 if (workItem.type != ETokenClass::Undefined) {
213+ workItem.index = _tokens.size ();
209214 _tokens.push_back (workItem);
210215 }
211216 }
0 commit comments