tree-sitter/src/compiler/rules/rules.cpp

62 lines
1.7 KiB
C++
Raw Normal View History

#include "rules.h"
using std::make_shared;
using std::string;
using std::initializer_list;
namespace tree_sitter {
namespace rules {
rule_ptr blank() {
return make_shared<Blank>();
}
rule_ptr character(char value) {
return make_shared<CharacterSet>(value);
}
rule_ptr character(CharacterClass value) {
return make_shared<CharacterSet>(value);
}
rule_ptr character(const std::unordered_set<CharacterRange> &matches, bool is_affirmative) {
return make_shared<CharacterSet>(matches, is_affirmative);
}
rule_ptr choice(const initializer_list<rule_ptr> &rules) {
rule_ptr result;
for (auto rule : rules)
result = result.get() ? make_shared<Choice>(result, rule) : rule;
return result;
}
rule_ptr pattern(const string &value) {
return make_shared<Pattern>(value);
}
rule_ptr repeat(const rule_ptr content) {
return std::make_shared<Repeat>(content);
}
rule_ptr seq(const initializer_list<rule_ptr> &rules) {
rule_ptr result = blank();
for (auto rule : rules)
result = (typeid(*result) != typeid(Blank)) ?
make_shared<Seq>(result, rule) :
rule;
return result;
}
rule_ptr str(const string &value) {
return make_shared<String>(value);
}
rule_ptr sym(const string &name) {
return make_shared<Symbol>(name, false);
}
rule_ptr aux_sym(const string &name) {
return make_shared<Symbol>(name, true);
2014-01-03 01:02:24 -08:00
}
}
}