aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/server/lexer/token_type.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/lexer/token_type.hpp')
-rw-r--r--server/lexer/token_type.hpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/server/lexer/token_type.hpp b/server/lexer/token_type.hpp
new file mode 100644
index 0000000..9489915
--- /dev/null
+++ b/server/lexer/token_type.hpp
@@ -0,0 +1,37 @@
+#pragma once
+
+#include <ostream>
+#include <string>
+#include <type_traits>
+#include <unordered_set>
+
+namespace math::server::lexer::token {
+
+enum class Type {
+ WHITESPACE,
+ PLUS,
+ MINUS,
+ ASTERISK,
+ SLASH,
+ LEFT_PAREN,
+ RIGHT_PAREN,
+ NUMBER,
+};
+
+using TypeInt = std::underlying_type<Type>::type;
+using TypeSet = std::unordered_set<Type>;
+
+TypeInt type_to_int(Type);
+std::string type_to_int_string(Type);
+
+bool is_const_token(Type);
+const TypeSet& const_tokens();
+
+bool token_has_value(Type);
+
+std::string type_to_string(Type);
+Type type_from_string(const std::string&);
+
+std::ostream& operator<<(std::ostream&, const Type&);
+
+}