lexer can now read single character tokens
This commit is contained in:
@@ -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
|
||||
|
@@ -1,7 +1,10 @@
|
||||
#include "token/token.hpp"
|
||||
|
||||
#include <istream>
|
||||
|
||||
namespace lexer {
|
||||
struct lexer {
|
||||
std::istream& input;
|
||||
token::token next_token();
|
||||
};
|
||||
} // namespace lexer
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user