Files
dlang-sqlite/dlang.sqlite/dlang/language.hpp
T
2026-10-12 23:24:32 +02:00

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