summaryrefslogtreecommitdiffstats
path: root/src/generator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/generator.cpp')
-rw-r--r--src/generator.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/generator.cpp b/src/generator.cpp
index d63b859..5b9766e 100644
--- a/src/generator.cpp
+++ b/src/generator.cpp
@@ -36,7 +36,7 @@ std::set<item_t> generator_t::get_set(const std::string &nonterm) {
auto entries = nonterms.equal_range(nonterm);
for (auto entry = entries.first; entry != entries.second; ++entry)
- set.insert(rules[entry->second].first);
+ set.insert(std::get<0>(rules[entry->second]));
return set;
}
@@ -117,10 +117,14 @@ void generator_t::generate_itemsets() {
}
}
-generator_t::generator_t(const std::vector<std::pair<item_t, std::string>> &rules0) : rules(rules0) {
+generator_t::generator_t(const std::vector<std::tuple<item_t, std::vector<std::string>, std::string>> &rules0,
+ const std::map<std::string, std::string> &nonterm_types0,
+ const std::map<symbol_t, std::pair<std::string, std::string>> &term_types0)
+ : rules(rules0), nonterm_types(nonterm_types0), term_types(term_types0) {
for (size_t i = 0; i < rules.size(); i++) {
- item_t rule = rules[i].first;
+ item_t rule = std::get<0>(rules[i]);
+ nonterminals.emplace(rule.get_lhs());
nonterms.emplace(rule.get_lhs(), i);
while (rule.has_next()) {