Compare commits

..

No commits in common. '2686964d3e6893d034a77acb17a571207d3a818b' and '8614e085693b8bdd7e46aca127b5f66a9a50fe61' have entirely different histories.

  1. 23
      src/Lexer.cpp
  2. 4
      src/Lexer.hpp

@ -18,8 +18,6 @@ namespace dumb {
"OPERATOR_COLON", "OPERATOR_COLON",
"OPERATOR_ARROW", "OPERATOR_ARROW",
"OPERATOR_DOUBLE_COLON", "OPERATOR_DOUBLE_COLON",
"OPERATOR_AMPERSAND",
"OPERATOR_PIPE",
"INTEGER_LITERAL", "INTEGER_LITERAL",
"FLOAT_LITERAL", "FLOAT_LITERAL",
"STRING_LITERAL", "STRING_LITERAL",
@ -65,9 +63,7 @@ namespace dumb {
{"*", Token::Type::OPERATOR_ASTERISK}, {"*", Token::Type::OPERATOR_ASTERISK},
{"=", Token::Type::OPERATOR_EQUALS}, {"=", Token::Type::OPERATOR_EQUALS},
{":", Token::Type::OPERATOR_COLON}, {":", Token::Type::OPERATOR_COLON},
{".", Token::Type::OPERATOR_DOT}, {".", Token::Type::OPERATOR_DOT}
{"&", Token::Type::OPERATOR_AMPERSAND},
{"|", Token::Type::OPERATOR_PIPE}
}; };
dumb::Lexer::Lexer(Compiler& compiler, std::filesystem::path sourceFile) : compiler(compiler), line(1), column(1), pointer(0) { dumb::Lexer::Lexer(Compiler& compiler, std::filesystem::path sourceFile) : compiler(compiler), line(1), column(1), pointer(0) {
@ -207,6 +203,7 @@ namespace dumb {
this->tokenStream.emplace_back(type, "", this->line, this->column); this->tokenStream.emplace_back(type, "", this->line, this->column);
this->consume();
} }
void Lexer::readStringLiteral() { void Lexer::readStringLiteral() {
@ -256,28 +253,20 @@ namespace dumb {
size_t value; size_t value;
switch (kind) { switch (kind) {
case 'x': { case 'x':
while (std::isdigit(this->current()) || (this->current() >= 'A' && this->current() <= 'F') || (this->current() >= 'a' && this->current() <= 'f')) while (std::isdigit(this->current()) || (this->current() >= 'A' && this->current() <= 'F') || (this->current() >= 'a' && this->current() <= 'f'))
this->buffer << this->consume(); this->buffer << this->consume();
std::string stringValue(this->buffer.str()); value = std::stoi(this->buffer.str(), nullptr, 16);
value = stringValue.length() > 0 ? std::stoi(stringValue, nullptr, 16) : 0;
break; break;
} case 'b':
case 'b': {
while (this->current() == '0' || this->current() == '1') while (this->current() == '0' || this->current() == '1')
this->buffer << this->consume(); this->buffer << this->consume();
std::string stringValue(this->buffer.str()); value = std::stoi(this->buffer.str(), nullptr, 2);
value = stringValue.length() > 0 ? std::stoi(stringValue, nullptr, 2) : 0;
break; break;
}
default: default:
std::cout << "Unexpected token '" << this->current() << "' on line " << this->line << " column " << this->column << std::endl; std::cout << "Unexpected token '" << this->current() << "' on line " << this->line << " column " << this->column << std::endl;
exit(1); exit(1);
} }
if (std::isalnum(this->current())) {
std::cout << "Unexpected token '" << this->current() << "' on line " << this->line << " column " << this->column << std::endl;
exit(1);
}
this->tokenStream.emplace_back(Token::Type::INTEGER_LITERAL, std::to_string(value), line, column); this->tokenStream.emplace_back(Token::Type::INTEGER_LITERAL, std::to_string(value), line, column);
this->resetBuffer(); this->resetBuffer();
} }

@ -22,8 +22,6 @@ namespace dumb {
OPERATOR_COLON, OPERATOR_COLON,
OPERATOR_ARROW, OPERATOR_ARROW,
OPERATOR_DOUBLE_COLON, OPERATOR_DOUBLE_COLON,
OPERATOR_AMPERSAND,
OPERATOR_PIPE,
INTEGER_LITERAL, INTEGER_LITERAL,
FLOAT_LITERAL, FLOAT_LITERAL,
STRING_LITERAL, STRING_LITERAL,
@ -97,8 +95,6 @@ namespace dumb {
case '=': case '=':
case ':': case ':':
case '.': case '.':
case '&':
case '|':
return true; return true;
default: default:
return false; return false;

Loading…
Cancel
Save