diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-10 03:04:22 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-10 03:04:22 +0200 |
commit | 8feccee75dadbf970b2fb402a8c624ed9b25f041 (patch) | |
tree | 897ed0229550ee72bdc69899432161a3dd696371 /src/generator_slr.hpp | |
parent | 70fc6ba8d2753492b2d4726f2718a2724bbf399a (diff) | |
download | solar-8feccee75dadbf970b2fb402a8c624ed9b25f041.tar solar-8feccee75dadbf970b2fb402a8c624ed9b25f041.zip |
generator_slr: implement first and follow set generation
Diffstat (limited to 'src/generator_slr.hpp')
-rw-r--r-- | src/generator_slr.hpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/generator_slr.hpp b/src/generator_slr.hpp index 9a2cd42..53ea89d 100644 --- a/src/generator_slr.hpp +++ b/src/generator_slr.hpp @@ -32,8 +32,28 @@ namespace solar { class generator_slr_t : public generator_t { +private: + std::map<std::pair<size_t, symbol_t>, size_t> reductions; + + std::map<std::string, std::set<symbol_t>> first_sets; + std::map<std::string, std::set<symbol_t>> follow_sets; + + void generate_first_sets(); + void generate_follow_sets(); + +protected: + virtual bool has_reduce_conflict(size_t from, const symbol_t &sym); + virtual void add_reduction(size_t from, size_t rule); + public: - generator_slr_t(const grammar_t &grammar) : generator_t(grammar) {} + const std::map<std::pair<size_t, symbol_t>, size_t> & get_reductions() const { + return reductions; + } + + generator_slr_t(const grammar_t &grammar) : generator_t(grammar) { + generate_follow_sets(); + generate(); + } }; } |