Skip to content

Commit fb9f230

Browse files
committed
Feature: sawhite-cwd-change (cmd_bio): Error Output Infrastructure
still playingn with the meta daa a TOKEN stores to work on a better error message context for future commits
1 parent cde3380 commit fb9f230

File tree

2 files changed

+27
-21
lines changed

2 files changed

+27
-21
lines changed

projects/cmd_bio/src/utils/Tokenizer.cpp

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

projects/cmd_bio/src/utils/Tokenizer.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ struct Token {
3131
std::string value;
3232
size_t line;
3333
size_t column;
34+
size_t index;
3435
Token();
35-
explicit Token(const ETokenClass c, const std::string& s, size_t line=0, size_t column=0);
36-
explicit Token(const ETokenClass c, const char s, size_t line=0, size_t column=0);
36+
explicit Token(const ETokenClass c, const std::string& s, size_t line=0, size_t column=0, size_t i = 0);
37+
explicit Token(const ETokenClass c, const char s, size_t line=0, size_t column=0, size_t i = 0);
3738

3839
Token(const Token& obj) = default;
3940
Token(Token&& obj) = default;

0 commit comments

Comments
 (0)