#include "tree_sitter/compiler.h" #include "./rule.h" #include "./blank.h" #include "./symbol.h" #include "./choice.h" #include "./seq.h" #include "./string.h" #include "./pattern.h" #include "./character_set.h" #include "./repeat.h" namespace tree_sitter { using std::make_shared; using std::string; using std::set; using std::vector; namespace rules { rule_ptr blank() { return make_shared(); } rule_ptr character(const set &ranges) { return make_shared(ranges); } rule_ptr character(const set &ranges, bool sign) { if (sign) return character(ranges); else return CharacterSet(ranges).complement().copy(); } rule_ptr choice(const vector &rules) { return Choice::Build(rules); } rule_ptr pattern(const string &value) { return make_shared(value); } rule_ptr repeat(const rule_ptr content) { return std::make_shared(content); } rule_ptr seq(const vector &rules) { return Seq::Build(rules); } rule_ptr str(const string &value) { return make_shared(value); } rule_ptr sym(const string &name) { return make_shared(name); } rule_ptr _sym(const string &name) { return make_shared(name, SymbolTypeHidden); } } }