2013-11-10 14:24:25 -08:00
|
|
|
#include "grammar.h"
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
namespace tree_sitter {
|
|
|
|
|
Grammar::Grammar(const rule_map &rules, const std::string &start_rule_name) :
|
|
|
|
|
rules(rules),
|
|
|
|
|
start_rule_name(start_rule_name) {};
|
2013-11-12 18:37:02 -08:00
|
|
|
|
|
|
|
|
std::unordered_map<std::string, rules::rule_ptr> build_rule_map(const initializer_list<string> &rule_names,
|
|
|
|
|
const initializer_list<rules::rule_ptr> &rule_vals) {
|
|
|
|
|
std::unordered_map<std::string, rules::rule_ptr> result;
|
2013-11-10 14:24:25 -08:00
|
|
|
auto rule_name_i = rule_names.begin();
|
|
|
|
|
auto rule_i = rule_vals.begin();
|
2013-11-12 18:37:02 -08:00
|
|
|
while (rule_i != rule_vals.end()) {
|
|
|
|
|
result[*rule_name_i] = *rule_i;
|
|
|
|
|
rule_i++;
|
|
|
|
|
rule_name_i++;
|
2013-11-10 14:24:25 -08:00
|
|
|
}
|
2013-11-12 18:37:02 -08:00
|
|
|
return result;
|
2013-11-10 14:24:25 -08:00
|
|
|
}
|
2013-11-12 18:37:02 -08:00
|
|
|
|
|
|
|
|
Grammar::Grammar(const initializer_list<string> &names, const initializer_list<rules::rule_ptr> &values) :
|
|
|
|
|
rules(build_rule_map(names, values)),
|
|
|
|
|
start_rule_name(*names.begin()) {}
|
2013-11-10 14:24:25 -08:00
|
|
|
}
|