91 lines
3.1 KiB
C++
91 lines
3.1 KiB
C++
#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
|