inital
This commit is contained in:
1 parent
5dac8fe0cd
commit
5626bdd9bf
36 files changed
+40532
-1
No files matched your search
@@ -0,0 +1,91 @@
|
||||
#ifndef _LANGUAGE_HPP
|
||||
#define _LANGUAGE_HPP
|
||||
|
||||
#include <array>
|
||||
#include <string_view>
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
|
||||
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<std::string_view, 13> 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
|
||||
Reference in new issue
Block a user