#ifndef _LANGUAGE_HPP #define _LANGUAGE_HPP #include #include #include #include namespace Dlang::Language { // --- Single Character Tokens (char) --- inline constexpr char op_endl = ';'; inline constexpr char op_exprstart = '('; inline constexpr char op_exprend = ')'; inline constexpr char op_arraystart = '{'; inline constexpr char op_arrayend = '}'; inline constexpr char op_liststart = '['; inline constexpr char op_listend = ']'; inline constexpr char op_equals = '='; inline constexpr char op_multi = '*'; inline constexpr char op_add = '+'; inline constexpr char op_sub = '-'; inline constexpr char op_div = '/'; inline constexpr char op_separator = ','; inline constexpr char op_above = '>'; inline constexpr char op_below = '<'; inline constexpr char op_colon = ':'; inline constexpr char op_dot = '.'; inline constexpr char op_not = '!'; inline constexpr char op_size = '#'; inline constexpr std::array single_char_tokens = { op_endl, op_exprstart, op_exprend, op_arraystart, op_arrayend, op_liststart, op_listend, op_equals, op_multi, op_add, op_sub, op_div, op_separator, op_above, op_below, op_colon, op_dot, op_not, op_size }; // --- Multi-Character Operators (const char*) --- inline constexpr const char* op_eq = "=="; inline constexpr const char* op_neq = "!="; inline constexpr const char* op_gte = ">="; inline constexpr const char* op_lte = "<="; inline constexpr const char* op_add_assign = "+="; inline constexpr const char* op_sub_assign = "-="; inline constexpr const char* op_mul_assign = "*="; inline constexpr const char* op_div_assign = "/="; inline constexpr const char* op_and = "&&"; inline constexpr const char* op_or = "||"; // --- Keywords (const char*) --- inline constexpr const char* kw_var = "var"; inline constexpr const char* kw_while = "while"; inline constexpr const char* kw_do = "do"; inline constexpr const char* kw_end = "end"; inline constexpr const char* kw_for = "for"; inline constexpr const char* kw_foreach = "foreach"; inline constexpr const char* kw_in = "in"; inline constexpr const char* kw_if = "if"; inline constexpr const char* kw_then = "then"; inline constexpr const char* kw_else = "else"; inline constexpr const char* kw_func = "func"; inline constexpr const char* kw_return = "return"; inline constexpr const char* kw_include = "include"; inline constexpr std::array keywords = { kw_var, kw_while, kw_do, kw_end, kw_for, kw_foreach, kw_in, kw_if, kw_then, kw_else, kw_func, kw_return, kw_include }; // --- Booleans --- inline constexpr const char* kw_true = "true"; inline constexpr const char* kw_false = "false"; constexpr bool IsSingleCharToken(char c) { return std::find(single_char_tokens.begin(), single_char_tokens.end(), c) != single_char_tokens.end(); } constexpr bool IsKeyword(std::string_view token) { return std::find(keywords.begin(), keywords.end(), token) != keywords.end(); } constexpr bool IsBoolean(std::string_view token) { return token == kw_true || token == kw_false; } } #endif // _LANGUAGE_HPP