Skip to content
This repository was archived by the owner on Mar 8, 2025. It is now read-only.

Commit 9497ed7

Browse files
committed
added fix for empty lines
1 parent af539d3 commit 9497ed7

File tree

2 files changed

+33
-12
lines changed

2 files changed

+33
-12
lines changed

lexer/DecoyLexer.cpp

+27-12
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,39 @@
22

33
std::vector<Token> Lexer::tokenize() {
44
std::vector<Token> tokens;
5+
bool lineHasTokens = false;
6+
57
while (pos < source.length()) {
68
char current = peek();
79

8-
if (std::isdigit(current) || current == '-') {
9-
tokens.push_back(readNumber());
10-
} else if (std::isalpha(current) || current == '_') {
11-
tokens.push_back(readIdentifier());
12-
} else if (current == '"') {
13-
tokens.push_back(readString());
14-
} else if (current == ',') {
15-
consume();
16-
tokens.push_back({ TokenType::COMMA, ",", line });
17-
} else if (current == '\n') {
10+
if (current == '\n') {
1811
consume();
19-
tokens.push_back({ TokenType::END_OF_LINE, "EOL", line });
12+
if (lineHasTokens) {
13+
tokens.push_back({ TokenType::END_OF_LINE, "EOL", line });
14+
lineHasTokens = false;
15+
}
2016
line++;
21-
} else {
17+
} else if (std::isspace(current)) {
2218
consume();
19+
} else {
20+
if (std::isdigit(current) || current == '-') {
21+
tokens.push_back(readNumber());
22+
} else if (std::isalpha(current) || current == '_') {
23+
tokens.push_back(readIdentifier());
24+
} else if (current == '"') {
25+
tokens.push_back(readString());
26+
} else if (current == ',') {
27+
consume();
28+
tokens.push_back({ TokenType::COMMA, ",", line });
29+
} else if (current == '\n') {
30+
consume();
31+
tokens.push_back({ TokenType::END_OF_LINE, "EOL", line });
32+
line++;
33+
} else {
34+
consume();
35+
}
36+
37+
lineHasTokens = true;
2338
}
2439
}
2540

parser/DecoyParser.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ const Token& Parser::advance() {
2222
}
2323

2424
void Parser::consume(TokenType expected, const std::string& error) {
25+
if (expected != TokenType::END_OF_LINE) {
26+
while (!isAtEnd() && peek().type == TokenType::END_OF_LINE) {
27+
advance();
28+
}
29+
}
30+
2531
if (isAtEnd() || peek().type != expected) {
2632
throw parseError(error);
2733
}

0 commit comments

Comments
 (0)