lexer can now read single character tokens

This commit is contained in:
Karma Riuk
2025-06-29 12:33:37 +02:00
parent ca05c3577a
commit ffff13b2e0
4 changed files with 44 additions and 1 deletions

View File

@@ -0,0 +1,34 @@
#include "lexer.hpp"
#include "token/token.hpp"
#include <iostream>
namespace lexer {
token::token lexer::next_token() {
char c;
if (!(input >> c))
return {token::type::END_OF_FILE, ""};
switch (c) {
case '=':
return {token::type::ASSIGN, c};
case '+':
return {token::type::PLUS, c};
case ',':
return {token::type::COMMA, c};
case ';':
return {token::type::SEMICOLON, c};
case '(':
return {token::type::LPAREN, c};
case ')':
return {token::type::RPAREN, c};
case '{':
return {token::type::LBRACE, c};
case '}':
return {token::type::RBRACE, c};
}
return {token::type::ILLEGAL, c};
};
} // namespace lexer

View File

@@ -1,7 +1,10 @@
#include "token/token.hpp"
#include <istream>
namespace lexer {
struct lexer {
std::istream& input;
token::token next_token();
};
} // namespace lexer

View File

@@ -8,5 +8,9 @@ namespace token {
struct token {
::token::type type;
std::string literal;
token(::token::type t, std::string s): type(t), literal(s) {}
token(::token::type t, char c): type(t), literal(1, c) {}
};
} // namespace token