Files
bed/include/internal/syntax/parser.h
T
2026-08-20 13:12:48 +01:00

47 lines
1.2 KiB
C++

#pragma once
#include "decl.h"
#include "internal/vase/vase.h"
#include "pch.h"
namespace bed::internal::syntax {
struct Parser {
static constexpr const uint64_t MAX_CHUNK = 256;
ParseState *root;
Language lang;
Parser(vase::Vase &, uint64_t, Language);
~Parser();
Parser(const Parser &) = delete;
Parser &operator=(const Parser &) = delete;
void reset(vase::Vase &, uint64_t, Language);
void erase(vase::Vase &, uint64_t, uint64_t);
void insert(vase::Vase &, uint64_t, uint64_t);
void modify(vase::Vase &, uint64_t, uint64_t);
std::pair<ParseState *, ParseState *> split_tree(ParseState *node, uint64_t line);
ParseState *join_tree(ParseState *a, ParseState *b);
Scope scope_root;
Scope &get_scope(uint64_t);
struct Iterator {
Parser *p;
std::optional<vase::Iterator> it;
void *state;
uint64_t at;
std::vector<Token> tokens;
Iterator(uint64_t, Parser *, vase::Vase &);
~Iterator();
Iterator(const Iterator &) = delete;
Iterator &operator=(const Iterator &) = delete;
Iterator(Iterator &&other);
Iterator &operator=(Iterator &&other);
void next();
};
std::optional<Iterator> get_hl(vase::Vase &, uint64_t);
};
} // namespace bed::internal::syntax