aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/server/lexer/token_type.hpp
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2019-12-07 03:36:21 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2019-12-07 03:36:21 +0300
commit00863566ec4601c65c435b74e575d49546a1c707 (patch)
tree479a0a6e96aba8191c7a65ea9bee2f4d5e3a4aba /server/lexer/token_type.hpp
parentadd stress_test.py (diff)
downloadmath-server-00863566ec4601c65c435b74e575d49546a1c707.tar.gz
math-server-00863566ec4601c65c435b74e575d49546a1c707.zip
split server into multiple components
In a vague attempt to make header files more readable, split server/ into a number of components. Also, refactor the unit tests to use the "Data-driven test cases" of Boost.Test.
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&);
+
+}