diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..797cb44 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,9 @@ +#include "token/type.hpp" + +#include + +int main() { + auto eof = TokenType::ILLEGAL; + std::cout << eof << std::endl; + return 0; +} diff --git a/src/token/token.hpp b/src/token/token.hpp new file mode 100644 index 0000000..4c4f3e5 --- /dev/null +++ b/src/token/token.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include "type.hpp" + +#include + +struct Token { + TokenType type; + std::string literal; +}; diff --git a/src/token/type.hpp b/src/token/type.hpp new file mode 100644 index 0000000..254c734 --- /dev/null +++ b/src/token/type.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include + +enum class TokenType { + ILLEGAL, + EOF_, + + IDENT, + INT, + + ASSIGN, + PLUS, + + COMMA, + SEMICOLON, + + LPAREN, + RPAREN, + LBRACE, + RBRACE, + + FUNCTION, + LET +}; + +inline std::ostream& operator<<(std::ostream& os, TokenType tt) { + switch (tt) { + case TokenType::ILLEGAL: + return os << "ILLEGAL"; + case TokenType::EOF_: + return os << "EOF"; + case TokenType::IDENT: + return os << "IDENT"; + case TokenType::INT: + return os << "INT"; + case TokenType::ASSIGN: + return os << "="; + case TokenType::PLUS: + return os << "+"; + case TokenType::COMMA: + return os << ","; + case TokenType::SEMICOLON: + return os << ";"; + case TokenType::LPAREN: + return os << "("; + case TokenType::RPAREN: + return os << ")"; + case TokenType::LBRACE: + return os << "{"; + case TokenType::RBRACE: + return os << "}"; + case TokenType::FUNCTION: + return os << "FUNCTION"; + case TokenType::LET: + return os << "LET"; + default: + return os << "Unknown"; + } +}