Fixed an error in double parsing logic
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
This commit is contained in:
@@ -19,9 +19,8 @@ enum TokenType {
|
||||
struct Token {
|
||||
enum TokenType type;
|
||||
std::variant<int64_t, double, std::string> value;
|
||||
|
||||
bool operator==(Token const& other);
|
||||
};
|
||||
bool operator==(Token const& one, Token const& other);
|
||||
std::ostream &operator<<(std::ostream &os, Token const &t);
|
||||
|
||||
class Lexer {
|
||||
|
15
src/lex.cpp
15
src/lex.cpp
@@ -23,8 +23,8 @@ std::ostream &operator<<(std::ostream &os, Token const &t) {
|
||||
return os;
|
||||
}
|
||||
|
||||
bool Token::operator==(Token const& other) {
|
||||
return this->type == other.type && this->value == other.value;
|
||||
bool operator==(Token const& one, Token const& other) {
|
||||
return one.type == other.type && one.value == other.value;
|
||||
}
|
||||
|
||||
bool ispunct(char c) {
|
||||
@@ -65,9 +65,10 @@ Token Lexer::lexNumOrSym() {
|
||||
// ... this will almost certainly change, won't it?
|
||||
string s = acc.str();
|
||||
string iterate_over = (s.at(0) == '-') ? s.substr(1) : s;
|
||||
bool is_number = true;
|
||||
bool is_number = false;
|
||||
bool dot_seen = false;
|
||||
for (char c : s) {
|
||||
for (char c : iterate_over) {
|
||||
|
||||
if (c == '.') {
|
||||
if (dot_seen) {
|
||||
is_number = false;
|
||||
@@ -76,14 +77,16 @@ Token Lexer::lexNumOrSym() {
|
||||
dot_seen = true;
|
||||
continue;
|
||||
}
|
||||
if (!isdigit(c)) {
|
||||
if (isdigit(c)) {
|
||||
is_number = true;
|
||||
} else {
|
||||
is_number = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_number && dot_seen) {
|
||||
if (s == ".")
|
||||
if (iterate_over == ".")
|
||||
return {TokenType::Symbol, s};
|
||||
return {TokenType::Double, stod(s)};
|
||||
} else if (is_number) {
|
||||
|
Reference in New Issue
Block a user