#include "rule_helpers.h" #include #include "compiler/rules/symbol.h" namespace tree_sitter { using std::make_shared; using std::set; using std::map; using std::ostream; using std::string; using std::to_string; rule_ptr character(const set &ranges) { return character(ranges, true); } rule_ptr character(const set &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); } return result.copy(); } rule_ptr i_sym(size_t index) { return make_shared(index); } rule_ptr i_token(size_t index) { return make_shared(index, true); } rule_ptr metadata(rule_ptr rule, map values) { return make_shared(rule, values); } rule_ptr active_prec(int precedence, rule_ptr rule) { return std::make_shared(rule, map({ { rules::PRECEDENCE, precedence }, { rules::IS_ACTIVE, true } })); } bool operator==(const Variable &left, const Variable &right) { return left.name == right.name && left.rule->operator==(*right.rule) && left.type == right.type; } }