tree-sitter/src/compiler/rules/visitor.cc
2016-11-19 13:59:34 -08:00

44 lines
1.1 KiB
C++

#include "compiler/rules/visitor.h"
#include <vector>
#include "compiler/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<rule_ptr> 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 Repeat::build(apply(rule->content));
}
rule_ptr IdentityRuleFn::apply_to(const Metadata *rule) {
return Metadata::build(apply(rule->rule), rule->params);
}
} // namespace rules
} // namespace tree_sitter