Compute closure of item sets under symbol expansion

This commit is contained in:
Max Brunsfeld 2013-11-12 18:37:02 -08:00
parent 6bbaba3ef8
commit f7063ba1d8
23 changed files with 251 additions and 91 deletions

View file

@ -6,15 +6,21 @@ namespace tree_sitter {
Grammar::Grammar(const rule_map &rules, const std::string &start_rule_name) :
rules(rules),
start_rule_name(start_rule_name) {};
Grammar::Grammar(const initializer_list<string> &rule_names,
const initializer_list<rules::rule_ptr> &rule_vals) {
rules = rule_map();
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;
auto rule_name_i = rule_names.begin();
auto rule_i = rule_vals.begin();
start_rule_name = *rule_name_i;
for (; rule_i != rule_vals.end(); rule_i++ && rule_name_i++) {
rules[*rule_name_i] = *rule_i;
while (rule_i != rule_vals.end()) {
result[*rule_name_i] = *rule_i;
rule_i++;
rule_name_i++;
}
return result;
}
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()) {}
}