2014-04-22 23:38:26 -07:00
|
|
|
#include "rule_helpers.h"
|
|
|
|
|
#include <memory>
|
2014-04-28 20:43:27 -07:00
|
|
|
#include "compiler/rules/symbol.h"
|
2014-04-22 23:38:26 -07:00
|
|
|
|
|
|
|
|
namespace tree_sitter {
|
2014-08-06 13:00:35 -07:00
|
|
|
using std::make_shared;
|
|
|
|
|
using std::set;
|
|
|
|
|
using std::map;
|
2015-09-05 17:05:37 -07:00
|
|
|
using std::ostream;
|
|
|
|
|
using std::string;
|
|
|
|
|
using std::to_string;
|
2014-08-06 13:00:35 -07:00
|
|
|
|
2015-09-05 17:05:37 -07:00
|
|
|
rule_ptr character(const set<uint32_t> &ranges) {
|
|
|
|
|
return character(ranges, true);
|
|
|
|
|
}
|
2014-08-06 13:00:35 -07:00
|
|
|
|
2015-09-05 17:05:37 -07:00
|
|
|
rule_ptr character(const set<uint32_t> &chars, bool sign) {
|
|
|
|
|
rules::CharacterSet result;
|
|
|
|
|
if (sign) {
|
|
|
|
|
for (uint32_t c : chars)
|
|
|
|
|
result.include(c);
|
|
|
|
|
} else {
|
|
|
|
|
result.include_all();
|
|
|
|
|
for (uint32_t c : chars)
|
|
|
|
|
result.exclude(c);
|
2014-08-06 13:00:35 -07:00
|
|
|
}
|
2015-09-05 17:05:37 -07:00
|
|
|
return result.copy();
|
|
|
|
|
}
|
2014-08-06 13:00:35 -07:00
|
|
|
|
2015-09-05 17:05:37 -07:00
|
|
|
rule_ptr i_sym(size_t index) {
|
|
|
|
|
return make_shared<rules::Symbol>(index);
|
|
|
|
|
}
|
2014-08-06 13:00:35 -07:00
|
|
|
|
2015-09-05 17:05:37 -07:00
|
|
|
rule_ptr i_token(size_t index) {
|
|
|
|
|
return make_shared<rules::Symbol>(index, true);
|
|
|
|
|
}
|
2014-08-06 13:00:35 -07:00
|
|
|
|
2015-09-05 17:05:37 -07:00
|
|
|
rule_ptr metadata(rule_ptr rule, map<rules::MetadataKey, int> values) {
|
|
|
|
|
return make_shared<rules::Metadata>(rule, values);
|
|
|
|
|
}
|
2014-08-06 13:00:35 -07:00
|
|
|
|
2015-11-08 13:36:09 -08:00
|
|
|
rule_ptr active_prec(int precedence, rule_ptr rule) {
|
|
|
|
|
return std::make_shared<rules::Metadata>(rule, map<rules::MetadataKey, int>({
|
|
|
|
|
{ rules::PRECEDENCE, precedence },
|
|
|
|
|
{ rules::IS_ACTIVE, true }
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-01 17:10:39 -07:00
|
|
|
bool operator==(const Variable &left, const Variable &right) {
|
2015-09-05 17:05:37 -07:00
|
|
|
return left.name == right.name && left.rule->operator==(*right.rule) &&
|
|
|
|
|
left.type == right.type;
|
2014-08-06 13:00:35 -07:00
|
|
|
}
|
2014-04-22 23:38:26 -07:00
|
|
|
}
|