2013-12-19 23:05:54 -08:00
|
|
|
#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>();
|
|
|
|
|
}
|
|
|
|
|
|
2013-12-22 00:19:55 -08:00
|
|
|
char_ptr character(char value) {
|
2013-12-21 23:53:26 -08:00
|
|
|
return make_shared<Character>(value);
|
2013-12-19 23:05:54 -08:00
|
|
|
}
|
2013-12-21 23:53:26 -08:00
|
|
|
|
2013-12-22 00:19:55 -08:00
|
|
|
char_ptr character(CharClass value) {
|
2013-12-21 23:53:26 -08:00
|
|
|
return make_shared<Character>(value);
|
2013-12-19 23:05:54 -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);
|
|
|
|
|
}
|
|
|
|
|
|
2013-12-22 00:19:55 -08:00
|
|
|
sym_ptr sym(const string &name) {
|
2014-01-04 15:01:06 -08:00
|
|
|
return make_shared<Symbol>(name);
|
2014-01-03 01:02:24 -08:00
|
|
|
}
|
2013-12-19 23:05:54 -08:00
|
|
|
}
|
|
|
|
|
}
|