#ifndef __TreeSitter__rule__ #define __TreeSitter__rule__ #include namespace tree_sitter { template class TransitionMap; namespace rules { class Rule { public: virtual TransitionMap transitions() const = 0; virtual bool operator==(const Rule& other) const = 0; virtual std::string to_string() const = 0; }; typedef std::shared_ptr rule_ptr; std::ostream& operator<<(std::ostream& stream, const Rule &rule); template rule_ptr build_binary_rule_tree(const std::initializer_list &rules) { rule_ptr result(nullptr); for (auto it = rules.end() - 1; it >= rules.begin(); --it) result = result.get() ? std::make_shared(*it, result) : *it; return result; } } } #endif