diff options
Diffstat (limited to 'src/generator.hpp')
-rw-r--r-- | src/generator.hpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/generator.hpp b/src/generator.hpp index d9bcaf6..880323b 100644 --- a/src/generator.hpp +++ b/src/generator.hpp @@ -38,12 +38,20 @@ class generator_t { private: std::multimap<std::string, item_t> rules; std::multimap<symbol_t, item_t> items; + std::map<std::set<item_t>, unsigned> itemsets; void close_set(std::set<item_t> *set); std::set<item_t> get_set(const std::string &nonterm); - void print_item(const item_t &item); - void print_set(const std::set<item_t> &set); + std::pair<bool, unsigned> add_set(const std::set<item_t> &set) { + auto ret = itemsets.emplace(set, itemsets.size()); + return std::make_pair(ret.second, ret.first->second); + } + + void generate_itemsets(); + + static void print_item(const item_t &item); + static void print_set(const std::set<item_t> &set); public: generator_t(const std::set<item_t> &rules0); |