114 const std::string name;
115 const json::json_pointer ptr;
117 static std::string convert_dot_to_ptr(std::string_view ptr_name) {
120 std::string_view part;
121 std::tie(part, ptr_name) = string_view::split(ptr_name,
'.');
122 result.push_back(
'/');
123 result.append(part.begin(), part.end());
124 }
while (!ptr_name.empty());
128 explicit DataNode(std::string_view ptr_name,
size_t pos):
ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_ptr(ptr_name))) {}
136 using Op = FunctionStorage::Operation;
139 enum class Associativity {
144 unsigned int precedence;
145 Associativity associativity;
151 std::vector<std::shared_ptr<ExpressionNode>> arguments;
152 CallbackFunction callback;
154 explicit FunctionNode(std::string_view name,
size_t pos)
155 :
ExpressionNode(pos), precedence(8), associativity(Associativity::Left), operation(Op::Callback), name(name), number_args(0) {}
161 associativity = Associativity::Left;
166 associativity = Associativity::Left;
171 associativity = Associativity::Left;
176 associativity = Associativity::Left;
181 associativity = Associativity::Left;
186 associativity = Associativity::Left;
191 associativity = Associativity::Left;
193 case Op::GreaterEqual: {
196 associativity = Associativity::Left;
201 associativity = Associativity::Left;
203 case Op::LessEqual: {
206 associativity = Associativity::Left;
211 associativity = Associativity::Left;
216 associativity = Associativity::Left;
218 case Op::Multiplication: {
221 associativity = Associativity::Left;
226 associativity = Associativity::Left;
231 associativity = Associativity::Right;
236 associativity = Associativity::Left;
241 associativity = Associativity::Left;
245 associativity = Associativity::Left;