7#include "../macros.hpp"
13hi_export_module(hikogui.parser.operator);
15hi_export
namespace hi::inline
v1 {
17enum class graphic_character_t {
19 exclamation_mark = 0x01,
52[[nodiscard]]
constexpr graphic_character_t char_to_graphic_character(
char x)
noexcept
55 case '!':
return graphic_character_t::exclamation_mark;
56 case '"':
return graphic_character_t::double_quote;
57 case '#':
return graphic_character_t::hash;
58 case '$':
return graphic_character_t::dollar;
59 case '%':
return graphic_character_t::percent;
60 case '&':
return graphic_character_t::ampersand;
61 case '\'':
return graphic_character_t::single_quote;
62 case '(':
return graphic_character_t::open_paren;
63 case ')':
return graphic_character_t::close_paren;
64 case '*':
return graphic_character_t::star;
65 case '+':
return graphic_character_t::plus;
66 case ',':
return graphic_character_t::comma;
67 case '-':
return graphic_character_t::minus;
68 case '.':
return graphic_character_t::dot;
69 case '/':
return graphic_character_t::slash;
70 case ':':
return graphic_character_t::colon;
71 case ';':
return graphic_character_t::semi_colon;
72 case '<':
return graphic_character_t::less_than;
73 case '=':
return graphic_character_t::equal;
74 case '>':
return graphic_character_t::greater_than;
75 case '?':
return graphic_character_t::question_mark;
76 case '[':
return graphic_character_t::open_bracket;
77 case '\\':
return graphic_character_t::back_slash;
78 case ']':
return graphic_character_t::close_bracket;
79 case '^':
return graphic_character_t::carret;
80 case '_':
return graphic_character_t::underscore;
81 case '`':
return graphic_character_t::back_quote;
82 case '{':
return graphic_character_t::open_brace;
83 case '|':
return graphic_character_t::pipe;
84 case '}':
return graphic_character_t::close_brace;
85 case '~':
return graphic_character_t::tilde;
86 default:
return graphic_character_t::none;
90[[nodiscard]]
constexpr uint64_t operator_to_int(std::string_view str)
noexcept
93 for (
auto const c: str) {
95 r |=
static_cast<uint64_t
>(char_to_graphic_character(c));
105 switch (operator_to_int(str)) {
106 case operator_to_int(
"::"):
return {uint8_t{1},
true};
107 case operator_to_int(
"("):
return {uint8_t{2},
true};
108 case operator_to_int(
"["):
return {uint8_t{2},
true};
109 case operator_to_int(
"."):
return {uint8_t{2},
true};
110 case operator_to_int(
"->"):
return {uint8_t{2},
true};
111 case operator_to_int(
".*"):
return {uint8_t{4},
true};
112 case operator_to_int(
"->*"):
return {uint8_t{4},
true};
113 case operator_to_int(
"**"):
return {uint8_t{4},
true};
114 case operator_to_int(
"*"):
return {uint8_t{5},
true};
115 case operator_to_int(
"/"):
return {uint8_t{5},
true};
116 case operator_to_int(
"%"):
return {uint8_t{5},
true};
117 case operator_to_int(
"+"):
return {uint8_t{6},
true};
118 case operator_to_int(
"-"):
return {uint8_t{6},
true};
119 case operator_to_int(
"<<"):
return {uint8_t{7},
true};
120 case operator_to_int(
">>"):
return {uint8_t{7},
true};
121 case operator_to_int(
"<=>"):
return {uint8_t{8},
true};
122 case operator_to_int(
"<"):
return {uint8_t{9},
true};
123 case operator_to_int(
">"):
return {uint8_t{9},
true};
124 case operator_to_int(
"<="):
return {uint8_t{9},
true};
125 case operator_to_int(
">="):
return {uint8_t{9},
true};
126 case operator_to_int(
"=="):
return {uint8_t{10},
true};
127 case operator_to_int(
"!="):
return {uint8_t{10},
true};
128 case operator_to_int(
"&"):
return {uint8_t{11},
true};
129 case operator_to_int(
"^"):
return {uint8_t{12},
true};
130 case operator_to_int(
"|"):
return {uint8_t{13},
true};
131 case operator_to_int(
"&&"):
return {uint8_t{14},
true};
132 case operator_to_int(
"||"):
return {uint8_t{15},
true};
133 case operator_to_int(
"?"):
return {uint8_t{16},
false};
134 case operator_to_int(
"="):
return {uint8_t{16},
false};
135 case operator_to_int(
"+="):
return {uint8_t{16},
false};
136 case operator_to_int(
"-="):
return {uint8_t{16},
false};
137 case operator_to_int(
"*="):
return {uint8_t{16},
false};
138 case operator_to_int(
"/="):
return {uint8_t{16},
false};
139 case operator_to_int(
"%="):
return {uint8_t{16},
false};
140 case operator_to_int(
"<<="):
return {uint8_t{16},
false};
141 case operator_to_int(
">>="):
return {uint8_t{16},
false};
142 case operator_to_int(
"&="):
return {uint8_t{16},
false};
143 case operator_to_int(
"^="):
return {uint8_t{16},
false};
144 case operator_to_int(
"|="):
return {uint8_t{16},
false};
145 case operator_to_int(
","):
return {uint8_t{17},
true};
146 case operator_to_int(
"]"):
return {uint8_t{17},
true};
147 case operator_to_int(
")"):
return {uint8_t{17},
true};
148 case operator_to_int(
"!"):
return {uint8_t{18},
true};
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
constexpr std::pair< uint8_t, bool > binary_operator_precedence(std::string_view str) noexcept
Binary Operator Precedence according to C++.
Definition operator.hpp:103
constexpr std::pair< uint8_t, bool > operator_precedence(std::string_view str, bool binary) noexcept
Operator Precedence according to C++.
Definition operator.hpp:156