diff options
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); }; } |