diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-06 18:50:03 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-06 18:50:03 +0200 |
commit | d6deff997e4f882d9fa46b109fd32e713f054a6d (patch) | |
tree | d0d5f6faf532234f239310c7376b737e1c284ea9 /src/generator.cpp | |
parent | 6fb60a72012f97f846477eb370d1a0706b1b4bc2 (diff) | |
download | solar-d6deff997e4f882d9fa46b109fd32e713f054a6d.tar solar-d6deff997e4f882d9fa46b109fd32e713f054a6d.zip |
Implement a lot of symbol value support
Diffstat (limited to 'src/generator.cpp')
-rw-r--r-- | src/generator.cpp | 10 |
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()) { |