Skip to content

Commit b0b578c

Browse files
author
Avi SZYCHTER
committed
Adapted the parsing tools to fit the new Token class
1 parent add7c05 commit b0b578c

File tree

2 files changed

+69
-69
lines changed

2 files changed

+69
-69
lines changed

include/ParsingUtils.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,38 +22,38 @@ void warning(const std::string& description, unsigned long long line) {
2222
}
2323

2424
void skipIf(Tokenizer& tokenizer, const std::string& token) {
25-
if(tokenizer.getNextToken().image() == token)
25+
if(tokenizer.getNextToken() == token)
2626
return;
2727

2828
throwError(
2929
"Syntax error",
3030
"expected \"" + token + "\" but got \"" +
31-
tokenizer.getCurrentToken().image() + "\"",
31+
tokenizer.getCurrentToken().image + "\"",
3232
tokenizer.lineCount()
3333
);
3434
}
3535

3636
void assertToken(const Tokenizer& tokenizer, const std::string& token) {
37-
if(tokenizer.getCurrentToken().image() == token)
37+
if(tokenizer.getCurrentToken() == token)
3838
return;
3939

4040
throwError(
4141
"Syntax error",
4242
"expected \"" + token + "\" but got \"" +
43-
tokenizer.getCurrentToken().image() + "\"",
43+
tokenizer.getCurrentToken().image + "\"",
4444
tokenizer.lineCount()
4545
);
4646
}
4747

4848

4949
Token checkCurrentTokenType(const Token& toCheck, Token::Type targetType,
5050
unsigned long long line) {
51-
if(toCheck.type() == targetType)
51+
if(toCheck == targetType)
5252
return toCheck;
5353

5454
throwError(
5555
"Syntax error",
56-
"unexpected \"" + toCheck.image() + "\"",
56+
"unexpected \"" + toCheck.image + "\"",
5757
line
5858
);
5959

@@ -64,12 +64,12 @@ Token checkCurrentTokenType(const Token& toCheck, Token::Type targetType,
6464
Token checkCurrentTokenType(const Token& toCheck,
6565
const std::string& token,
6666
unsigned long long line) {
67-
if(toCheck.image() == token)
67+
if(toCheck == token)
6868
return toCheck;
6969

7070
throwError(
7171
"Syntax error",
72-
"unexpected \"" + toCheck.image() + "\"",
72+
"unexpected \"" + toCheck.image + "\"",
7373
line
7474
);
7575

src/parsing/DBCParser.cpp

Lines changed: 61 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void addComment(Tokenizer& tokenizer, CANDatabase& db) {
2727

2828
// Handle global comment
2929
Token currentToken = tokenizer.getNextToken();
30-
if (currentToken.type() == Token::Literal) {
30+
if (currentToken == Token::StringLiteral) {
3131
skipIf(tokenizer, ";");
3232
return;
3333
}
@@ -38,43 +38,43 @@ void addComment(Tokenizer& tokenizer, CANDatabase& db) {
3838
warning("Frame " + fId + " does not exist", line);
3939
};
4040

41-
if(commentType.image() == "SG_") {
41+
if(commentType == "SG_") {
4242
targetFrame = checkTokenType(tokenizer, Token::Number);
4343
targetSignal = checkTokenType(tokenizer, Token::Identifier);
44-
commentValue = checkTokenType(tokenizer, Token::Literal);
44+
commentValue = checkTokenType(tokenizer, Token::StringLiteral);
4545
skipIf(tokenizer, ";");
4646

4747
auto frame_id = targetFrame.toUInt();
4848
if(!db.contains(frame_id)) {
49-
wWrongFrameId(targetFrame.image(), tokenizer.lineCount());
49+
wWrongFrameId(targetFrame.image, tokenizer.lineCount());
5050
return;
5151
}
52-
else if(!db.at(frame_id).contains(targetSignal.image())) {
53-
warning("Frame " + targetFrame.image() +
54-
"has no signal \"" + targetSignal.image() + "\"",
52+
else if(!db.at(frame_id).contains(targetSignal.image)) {
53+
warning("Frame " + targetFrame.image +
54+
"has no signal \"" + targetSignal.image + "\"",
5555
tokenizer.lineCount());
5656
return;
5757
}
5858
db.at(frame_id)
59-
.at(targetSignal.image())
60-
.setComment(commentValue.image());
59+
.at(targetSignal.image)
60+
.setComment(commentValue.image);
6161
}
62-
else if(commentType.image() == "BO_") {
62+
else if(commentType == "BO_") {
6363
targetFrame = checkTokenType(tokenizer, Token::Number);
64-
commentValue = checkTokenType(tokenizer, Token::Literal);
64+
commentValue = checkTokenType(tokenizer, Token::StringLiteral);
6565
skipIf(tokenizer, ";");
6666

6767
auto frame_id = targetFrame.toUInt();
6868
if(!db.contains(frame_id)) {
69-
wWrongFrameId(targetFrame.image(), tokenizer.lineCount());
69+
wWrongFrameId(targetFrame.image, tokenizer.lineCount());
7070
return;
7171
}
7272

73-
db.at(frame_id).setComment(commentValue.image());
73+
db.at(frame_id).setComment(commentValue.image);
7474
}
7575
else {
7676
warning("Unsupported comment operation \"" +
77-
commentType.image() + "\"",
77+
commentType.image + "\"",
7878
tokenizer.lineCount());
7979
tokenizer.skipUntil(";");
8080
}
@@ -84,19 +84,19 @@ void addBADirective(Tokenizer& tokenizer, CANDatabase& db) {
8484
Token infoType;
8585
assertToken(tokenizer, "BA_");
8686

87-
infoType = checkTokenType(tokenizer, Token::Literal);
88-
if(infoType.image() == "GenMsgCycleTime" || infoType.image() == "CycleTime") {
87+
infoType = checkTokenType(tokenizer, Token::StringLiteral);
88+
if(infoType == "GenMsgCycleTime" || infoType == "CycleTime") {
8989
skipIf(tokenizer, "BO_");
9090
Token frameId = checkTokenType(tokenizer, Token::Number);
9191
Token period = checkTokenType(tokenizer, Token::Number);
9292
skipIf(tokenizer, ";");
9393

94-
if(period.image()[0] == '-') {
94+
if(period == Token::NegativeNumber) {
9595
warning("cannot set negative period",
9696
tokenizer.lineCount());
9797
return;
9898
}
99-
else if(frameId.image()[0] == '-') {
99+
else if(frameId == Token::NegativeNumber) {
100100
warning("invalid frame id",
101101
tokenizer.lineCount());
102102
return;
@@ -114,7 +114,7 @@ void addBADirective(Tokenizer& tokenizer, CANDatabase& db) {
114114
}
115115
}
116116
else {
117-
std::cout << "WARNING: Unrecognized BA_ command " << infoType.image()
117+
std::cout << "WARNING: Unrecognized BA_ command " << infoType.image
118118
<< " at line " << tokenizer.lineCount()
119119
<< std::endl;
120120
tokenizer.skipUntil(";");
@@ -136,7 +136,7 @@ void parseNewSymbols(Tokenizer& tokenizer) {
136136
skipIf(tokenizer, ":");
137137

138138
Token token = tokenizer.getNextToken();
139-
while (ns_choices.find(token.image()) != ns_choices.end()) {
139+
while (ns_choices.count(token.image) > 0) {
140140
token = tokenizer.getNextToken();
141141
}
142142
tokenizer.saveToken(token);
@@ -148,46 +148,46 @@ CANDatabase DBCParser::fromTokenizer(const std::string& name, Tokenizer& tokeniz
148148

149149
CANDatabase result(name);
150150

151-
while(currentToken.type() != Token::Eof) {
152-
// std::cout << currentToken.image() << std::endl;
153-
if (currentToken.image() == "VERSION") {
154-
currentToken = checkTokenType(tokenizer, Token::Literal);
155-
std::cout << "DBC version: " << currentToken.image() << std::endl;
151+
while(currentToken != Token::Eof) {
152+
// std::cout << currentToken.image << std::endl;
153+
if (currentToken == "VERSION") {
154+
currentToken = checkTokenType(tokenizer, Token::StringLiteral);
155+
// std::cout << "DBC version: " << currentToken.image << std::endl;
156156
}
157-
else if (currentToken.image() == "BU_") {
157+
else if (currentToken == "BU_") {
158158
std::set<std::string> ecus = parseECUs(tokenizer);
159159
std::cout << "The following ECUs have been defined:" << std::endl;
160160
for (const auto& ecu : ecus) {
161161
std::cout << ecu << ", ";
162162
}
163163
std::cout << std::endl;
164164
}
165-
else if (currentToken.image() == "BO_") {
165+
else if (currentToken == "BO_") {
166166
result.addFrame(parseFrame(tokenizer));
167167
}
168-
else if (currentToken.image() == "SG_") {
168+
else if (currentToken == "SG_") {
169169
parseSignal(tokenizer);
170170
std::cout << "Identified signal outside frame -> WARNING !!! (line "
171171
<< tokenizer.lineCount() << ")" << std::endl;
172172
}
173-
else if (currentToken.image() == "CM_") {
173+
else if (currentToken == "CM_") {
174174
addComment(tokenizer, result);
175175
// TODO: Handle comments
176176
}
177-
else if (currentToken.image() == "BA_") {
177+
else if (currentToken == "BA_") {
178178
addBADirective(tokenizer, result);
179179
}
180-
else if (currentToken.image() == "VAL_") {
180+
else if (currentToken == "VAL_") {
181181
parseSignalChoices(tokenizer, result);
182182
}
183-
else if (currentToken.image() == "NS_") {
183+
else if (currentToken == "NS_") {
184184
parseNewSymbols(tokenizer);
185185
}
186-
else if (currentToken.image() == "BS_") {
186+
else if (currentToken == "BS_") {
187187
skipIf(tokenizer, ":");
188188

189189
currentToken = tokenizer.getNextToken();
190-
if (currentToken.type() != Token::Number)
190+
if (currentToken != Token::Number)
191191
continue;
192192

193193
Token baudrate = checkCurrentTokenType(currentToken, Token::Number, tokenizer.lineCount());
@@ -199,7 +199,7 @@ CANDatabase DBCParser::fromTokenizer(const std::string& name, Tokenizer& tokeniz
199199
// TODO: handle the statement
200200
}
201201
else {
202-
std::cerr << currentToken.image() << " is not a valid statement (yet). The statement is skipped." << std::endl;
202+
std::cerr << currentToken.image << " is not a valid statement (yet). The statement is skipped." << std::endl;
203203
tokenizer.skipUntil(";");
204204
}
205205
currentToken = tokenizer.getNextToken();
@@ -222,7 +222,7 @@ CANSignal parseSignal(Tokenizer& tokenizer) {
222222
length = checkTokenType(tokenizer, Token::Number);
223223
skipIf(tokenizer, "@");
224224
endianess = checkTokenType(tokenizer, Token::Number);
225-
signedness = checkTokenType(tokenizer, Token::Sign);
225+
signedness = checkTokenType(tokenizer, Token::ArithmeticSign);
226226
skipIf(tokenizer, "(");
227227
scale = checkTokenType(tokenizer, Token::Number);
228228
skipIf(tokenizer, ",");
@@ -233,27 +233,27 @@ CANSignal parseSignal(Tokenizer& tokenizer) {
233233
skipIf(tokenizer, "|");
234234
max = checkTokenType(tokenizer, Token::Number);
235235
skipIf(tokenizer, "]");
236-
unit = checkTokenType(tokenizer, Token::Literal);
236+
unit = checkTokenType(tokenizer, Token::StringLiteral);
237237

238238
targetECU = checkTokenType(tokenizer, Token::Identifier); // Ignored for now
239239
Token currentToken = tokenizer.getNextToken();
240-
while (currentToken.image() == ",") {
240+
while (currentToken == ",") {
241241
targetECU = checkTokenType(tokenizer, Token::Identifier);
242242
currentToken = tokenizer.getNextToken();
243243
}
244244

245-
if (currentToken.type() != Token::Eof)
245+
if (currentToken != Token::Eof)
246246
tokenizer.saveToken(currentToken);
247247

248248
return CANSignal(
249-
signalName.image(),
250-
std::stoul(startBit.image()),
251-
std::stoul(length.image()),
252-
std::stof(scale.image()),
253-
std::stof(offset.image()),
254-
signedness.image() == "-" ? CANSignal::Signed : CANSignal::Unsigned,
255-
endianess.image() == "0" ? CANSignal::BigEndian : CANSignal::LittleEndian,
256-
CANSignal::Range::fromString(min.image(), max.image())
249+
signalName.image,
250+
startBit.toUInt(),
251+
length.toUInt(),
252+
scale.toDouble(),
253+
offset.toDouble(),
254+
signedness == "-" ? CANSignal::Signed : CANSignal::Unsigned,
255+
endianess == "0" ? CANSignal::BigEndian : CANSignal::LittleEndian,
256+
CANSignal::Range::fromString(min.image, max.image)
257257
);
258258
}
259259

@@ -274,16 +274,16 @@ CANFrame parseFrame(Tokenizer& tokenizer) {
274274
ecu = checkTokenType(tokenizer, Token::Identifier);
275275

276276
CANFrame result(
277-
name.image(), id.toUInt(), dlc.toUInt());
277+
name.image, id.toUInt(), dlc.toUInt());
278278

279279
Token currentToken = tokenizer.getNextToken();
280280

281-
while(currentToken.image() == "SG_") {
281+
while(currentToken == "SG_") {
282282
result.addSignal(parseSignal(tokenizer));
283283
currentToken = tokenizer.getNextToken();
284284
}
285285

286-
if(currentToken.type() != Token::Eof)
286+
if(currentToken != Token::Eof)
287287
tokenizer.saveToken(currentToken);
288288

289289
return result;
@@ -299,13 +299,13 @@ std::set<std::string> parseECUs(Tokenizer& tokenizer) {
299299
Token currentToken = checkTokenType(tokenizer, Token::Identifier);
300300

301301
// Looking for all the identifiers on the same line
302-
while(currentToken.type() != Token::Eof &&
302+
while(currentToken != Token::Eof &&
303303
currentLine == tokenizer.lineCount()) {
304-
result.insert(currentToken.image());
304+
result.insert(currentToken.image);
305305
currentToken = checkTokenType(tokenizer, Token::Identifier);
306306
}
307307

308-
if(currentToken.type() != Token::Eof)
308+
if(currentToken != Token::Eof)
309309
tokenizer.saveToken(currentToken);
310310

311311
return result;
@@ -324,16 +324,16 @@ void parseSignalChoices(Tokenizer& tokenizer, CANDatabase& db) {
324324
targetSignal = checkTokenType(tokenizer, Token::Identifier);
325325

326326
Token currentToken = tokenizer.getNextToken();
327-
while(currentToken.image() != ";" &&
328-
currentToken.type() != Token::Eof) {
327+
while(currentToken != ";" &&
328+
currentToken != Token::Eof) {
329329
currentVal = checkCurrentTokenType(currentToken, Token::Number,
330330
tokenizer.lineCount());
331-
currentLabel = checkTokenType(tokenizer, Token::Literal);
331+
currentLabel = checkTokenType(tokenizer, Token::StringLiteral);
332332

333333
targetChoices.insert(
334334
std::make_pair(
335335
currentVal.toUInt(),
336-
currentLabel.image()
336+
currentLabel.image
337337
)
338338
);
339339

@@ -343,14 +343,14 @@ void parseSignalChoices(Tokenizer& tokenizer, CANDatabase& db) {
343343

344344
unsigned long long frame_id = targetFrame.toUInt();
345345
if(!db.contains(frame_id) ||
346-
!db.at(frame_id).contains(targetSignal.image())) {
347-
warning("Cannot assign enum to signal \"" + targetFrame.image() + "/" +
348-
targetSignal.image() + "\"",
346+
!db.at(frame_id).contains(targetSignal.image)) {
347+
warning("Cannot assign enum to signal \"" + targetFrame.image + "/" +
348+
targetSignal.image + "\"",
349349
tokenizer.lineCount());
350350
return;
351351
}
352352

353353
db.at(frame_id)
354-
.at(targetSignal.image())
354+
.at(targetSignal.image)
355355
.setChoices(targetChoices);
356356
}

0 commit comments

Comments
 (0)