summaryrefslogtreecommitdiffstats
path: root/src/generator.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-04-06 18:50:03 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-04-06 18:50:03 +0200
commitd6deff997e4f882d9fa46b109fd32e713f054a6d (patch)
treed0d5f6faf532234f239310c7376b737e1c284ea9 /src/generator.cpp
parent6fb60a72012f97f846477eb370d1a0706b1b4bc2 (diff)
downloadsolar-d6deff997e4f882d9fa46b109fd32e713f054a6d.tar
solar-d6deff997e4f882d9fa46b109fd32e713f054a6d.zip
Implement a lot of symbol value support
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()) {