2013-12-19 23:05:54 -08:00
|
|
|
#include "rules.h"
|
|
|
|
|
|
|
|
|
|
using std::make_shared;
|
|
|
|
|
using std::string;
|
|
|
|
|
using std::initializer_list;
|
2014-02-05 18:56:04 -08:00
|
|
|
using std::set;
|
2013-12-19 23:05:54 -08:00
|
|
|
|
|
|
|
|
namespace tree_sitter {
|
|
|
|
|
namespace rules {
|
|
|
|
|
rule_ptr blank() {
|
|
|
|
|
return make_shared<Blank>();
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-11 16:48:40 -08:00
|
|
|
rule_ptr character(char value) {
|
2014-02-05 18:56:04 -08:00
|
|
|
set<CharacterRange> ranges = { value };
|
|
|
|
|
return make_shared<CharacterSet>(ranges);
|
2013-12-19 23:05:54 -08:00
|
|
|
}
|
2013-12-21 23:53:26 -08:00
|
|
|
|
2014-02-05 18:56:04 -08:00
|
|
|
rule_ptr character(const set<CharacterRange> &ranges) {
|
|
|
|
|
return make_shared<CharacterSet>(ranges);
|
2013-12-19 23:05:54 -08:00
|
|
|
}
|
2014-02-05 18:56:04 -08:00
|
|
|
|
|
|
|
|
rule_ptr character(const set<CharacterRange> &ranges, bool sign) {
|
|
|
|
|
return make_shared<CharacterSet>(ranges, sign);
|
2014-01-29 19:18:21 -08:00
|
|
|
}
|
2013-12-21 23:53:26 -08:00
|
|
|
|
2013-12-19 23:05:54 -08:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-11 16:48:40 -08:00
|
|
|
rule_ptr sym(const string &name) {
|
2014-01-28 13:27:30 -08:00
|
|
|
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
|
|
|
}
|
2013-12-19 23:05:54 -08:00
|
|
|
}
|
|
|
|
|
}
|