From d6deff997e4f882d9fa46b109fd32e713f054a6d Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Mon, 6 Apr 2015 18:50:03 +0200 Subject: Implement a lot of symbol value support --- src/parser_state.hpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'src/parser_state.hpp') 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 + namespace solar { class parser_state_t { private: - std::vector> rules; + std::vector, std::string>> rules; + std::map nonterm_types; + std::map> term_types; item_t current; + std::vector current_vars; + std::string current_var; + std::string current_type; public: parser_state_t() : current("") {} - const std::vector> & get_rules() const { + const std::vector, std::string>> & get_rules() const { return rules; } + const std::map & get_nonterm_types() const { + return nonterm_types; + } + + const std::map> & 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); }; } -- cgit v1.2.3