#include "compiler/rules/visitor.h" #include #include "compiler/rules/rule.h" #include "compiler/rules/blank.h" #include "compiler/rules/character_set.h" #include "compiler/rules/choice.h" #include "compiler/rules/seq.h" #include "compiler/rules/string.h" #include "compiler/rules/metadata.h" #include "compiler/rules/pattern.h" #include "compiler/rules/repeat.h" namespace tree_sitter { namespace rules { using std::vector; Visitor::~Visitor() {} rule_ptr IdentityRuleFn::default_apply(const Rule *rule) { return rule->copy(); } rule_ptr IdentityRuleFn::apply_to(const Choice *rule) { vector rules; for (const auto &el : rule->elements) rules.push_back(apply(el)); return Choice::build(rules); } rule_ptr IdentityRuleFn::apply_to(const Seq *rule) { return Seq::build({ apply(rule->left), apply(rule->right) }); } rule_ptr IdentityRuleFn::apply_to(const Repeat *rule) { return std::make_shared(apply(rule->content)); } rule_ptr IdentityRuleFn::apply_to(const Metadata *rule) { return std::make_shared(apply(rule->rule), rule->value); } } // namespace rules } // namespace tree_sitter