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/parser_state.hpp | |
parent | 6fb60a72012f97f846477eb370d1a0706b1b4bc2 (diff) | |
download | solar-d6deff997e4f882d9fa46b109fd32e713f054a6d.tar solar-d6deff997e4f882d9fa46b109fd32e713f054a6d.zip |
Implement a lot of symbol value support
Diffstat (limited to 'src/parser_state.hpp')
-rw-r--r-- | src/parser_state.hpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/parser_state.hpp b/src/parser_state.hpp index a120423..882fec2 100644 --- a/src/parser_state.hpp +++ b/src/parser_state.hpp @@ -28,27 +28,49 @@ #include "item.hpp" +#include <map> + namespace solar { class parser_state_t { private: - std::vector<std::pair<item_t, std::string>> rules; + std::vector<std::tuple<item_t, std::vector<std::string>, std::string>> rules; + std::map<std::string, std::string> nonterm_types; + std::map<symbol_t, std::pair<std::string, std::string>> term_types; item_t current; + std::vector<std::string> current_vars; + std::string current_var; + std::string current_type; public: parser_state_t() : current("") {} - const std::vector<std::pair<item_t, std::string>> & get_rules() const { + const std::vector<std::tuple<item_t, std::vector<std::string>, std::string>> & get_rules() const { return rules; } + const std::map<std::string, std::string> & get_nonterm_types() const { + return nonterm_types; + } + + const std::map<symbol_t, std::pair<std::string, std::string>> & get_term_types() const { + return term_types; + } + void new_rule(const char *nonterm); void add_rule_nonterminal(const char *nonterm); void add_rule_terminal(const char *term); void add_rule_terminal(unsigned char term); void add_rule(const std::string &action = ""); + void add_rule_var(const char *var); + + void add_type_nonterminal(const char *nonterm); + void add_type_terminal(const char *term); + void set_type_nonterminal(const char *type); + void set_type_terminal(const char *type); + void set_type_terminal_name(const char *name); }; } |