19struct skeleton_parse_context {
21 using const_iterator =
typename std::string_view::const_iterator;
23 statement_stack_type statement_stack;
29 std::optional<const_iterator> text_segment_start;
36 skeleton_parse_context() =
delete;
37 skeleton_parse_context(skeleton_parse_context
const &other) =
delete;
38 skeleton_parse_context &operator=(skeleton_parse_context
const &other) =
delete;
39 skeleton_parse_context(skeleton_parse_context &&other) =
delete;
40 skeleton_parse_context &operator=(skeleton_parse_context &&other) =
delete;
41 ~skeleton_parse_context() =
default;
43 skeleton_parse_context(std::filesystem::path
const &path, const_iterator first, const_iterator last);
45 [[nodiscard]]
char const &operator*() const noexcept
50 [[nodiscard]]
bool atEOF() const noexcept
55 skeleton_parse_context &operator++() noexcept
63 skeleton_parse_context &operator+=(ssize_t x)
noexcept
65 for (ssize_t i = 0; i != x; ++i) {
71 bool starts_with(std::string_view text)
const noexcept
73 return std::string_view{index, last}.starts_with(text);
76 bool starts_with_and_advance_over(std::string_view text)
noexcept
78 if (starts_with(text)) {
86 bool advance_to(std::string_view text)
noexcept
89 if (starts_with(text)) {
97 bool advance_over(std::string_view text)
noexcept
99 if (advance_to(text)) {
100 *
this += ssize(text);
107 std::unique_ptr<formula_node> parse_expression(std::string_view end_text);
109 std::unique_ptr<formula_node> parse_expression_and_advance_over(std::string_view end_text);
111 template<
typename T,
typename... Args>
112 void push(Args &&...args)
117 [[nodiscard]]
bool append(std::unique_ptr<skeleton_node> x)
noexcept;
119 template<
typename T,
typename... Args>
120 [[nodiscard]]
bool append(Args &&...args)
noexcept
122 if (statement_stack.
size() > 0) {
133 [[nodiscard]]
bool pop() noexcept;
135 void start_of_text_segment(
int back_track = 0) noexcept;
136 void end_of_text_segment();
138 [[nodiscard]]
bool top_statement_is_do() const noexcept;
#define hi_assert(expression,...)
Assert if expression is true.
Definition assert.hpp:199
formula_post_process_context post_process_context
Post process context is used to record functions that are defined in the template being parsed.
Definition skeleton_parse_context.hpp:34