1 #ifndef JLE_HUMBLE_PARSER__H 2 #define JLE_HUMBLE_PARSER__H 12 #include "core/tuple.hpp" 13 #include "core/cont/map.hpp" 18 namespace jle {
namespace hp {
31 parse(
const std::string& input,
const std::string& init)
const;
34 multi_parse(
const std::string& input, std::string minit=
"")
const;
41 jle::tuple<bool, std::string>
42 add_rule (
const std::string& rule_t2);
50 jle::tuple<bool, std::string>
54 jle::tuple<bool, std::string>
55 add_rules_from_stream (std::istream& stream);
58 jle::tuple<bool, std::string>
59 add_rules_from_file(
const std::string& file_rules1);
62 jle::tuple<bool, std::string>
63 add_rules_from_string (
const std::string& rules);
68 bool exist_errors_in_rules(
void)
const {
return errors_in_rules; }
70 std::list<std::string> get_terminal_rules(
void)
const;
71 std::list<std::string> get_non_terminal_rules(
void)
const;
73 void set_var(
const std::string& name,
const std::string& value);
78 mutable std::string string2parse;
80 typedef std::map< std::string,
81 std::list< jle::tuple<
82 std::list<std::string>,
85 Container_rules non_terminal_rules ;
86 Container_rules terminal_rules ;
90 execute_non_terminal (
int srt2parse_pos,
const std::string& non_terminal_code,
AST_node_item& ast_node)
const;
93 execute_terminal (
int str2parse_pos,
const std::string& terminal_code ,
AST_node_item& ast_node)
const;
96 execute_non_terminal_klein (
int srt2parse_pos,
const std::string& non_terminal_code,
AST_node_item& ast_node)
const;
99 execute_terminal_klein (
int srt2parse_pos,
const std::string& non_terminal_code,
AST_node_item& ast_node)
const;
102 bool errors_in_rules;
104 mutable int deeper_error_parsing_pos;
105 mutable std::set<std::string> deeper_error_expected_symbols;
107 bool is_terminal(
const std::string& str)
const;
109 std::string default_init_symbol;
115 jle::tuple<bool, int> execute_predefined_var (
int srt2parse_pos,
const std::string& terminal_rule,
AST_node_item& ast_node,
const std::string& rule2replace)
const;
116 jle::tuple<bool, int> execute_regular_expresion(
int srt2parse_pos,
const std::string& terminal_rule,
AST_node_item& ast_node,
const std::string& rule2replace)
const;
117 jle::tuple<bool, int> execute_literal (
int srt2parse_pos,
const std::string& terminal_rule,
AST_node_item& ast_node,
const std::string& rule2replace)
const;
124 bool adding_rule_multi_line;
125 std::string building_rule;
127 bool adding_template =
false;
128 std::string template_name;
129 std::string building_template;
134 jle::tuple<bool, std::string> _adding_rule_multi_line(
const std::string& line);
135 jle::tuple<bool, std::string> _adding_template(
const std::string& line);
141 #endif // JLE_HUMBLE_PARSER__H jle::tuple< bool, std::string > add_rule(const std::string &rule_t2)
Add a parsing rule, and a tansformation or templates.
Definition: humbleparser.cpp:296
Definition: humbleparser.h:23
jle::tuple< bool, std::string > add_line(std::string line)
Adds a line. It can contain part of a rule.
Definition: humbleparser.cpp:528
generic namespace
Definition: alarm.cpp:12