summaryrefslogtreecommitdiffstats
path: root/src/parser_state.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser_state.hpp')
-rw-r--r--src/parser_state.hpp26
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);
};
}