jle_cpp_tk  0.0 2015-04-03 sh1:"d699093732dd5f321606d0ff7a6b63b229f1922c"
A small, safe, selft contained, soft-realtime C++ toolkit
humbleparser.h
1 #ifndef JLE_HUMBLE_PARSER__H
2 #define JLE_HUMBLE_PARSER__H
3 
4 
5 #include <string>
6 #include <map>
7 #include <list>
8 #include <set>
9 
10 
11 #include "ast.h"
12 #include "core/tuple.hpp"
13 #include "core/cont/map.hpp"
14 
15 
16 
17 
18 namespace jle { namespace hp {
19 
20 
21 
22 
24 {
25 public:
26  Humble_parser();
27  virtual ~Humble_parser();
28 
29  // parse ------------------------------------------------------------
30  jle::tuple<bool, std::string/*remaining*/, AST_node_item>
31  parse(const std::string& input, const std::string& init) const;
32 
33  jle::tuple<bool, std::string/*remaining*/, AST_node_item>
34  multi_parse(const std::string& input, std::string minit="") const;
35 
36 
37  // load rules ------------------------------------------------------
38 
41  jle::tuple<bool, std::string>
42  add_rule (const std::string& rule_t2);
43 
50  jle::tuple<bool, std::string>
51  add_line (std::string line);
52 
53 
54  jle::tuple<bool, std::string>
55  add_rules_from_stream (std::istream& stream);
56 
57 
58  jle::tuple<bool, std::string>
59  add_rules_from_file(const std::string& file_rules1);
60 
61 
62  jle::tuple<bool, std::string>
63  add_rules_from_string (const std::string& rules);
64 
65 
66 
67  // status ----------------------------------------------------------
68  bool exist_errors_in_rules(void) const { return errors_in_rules; }
69  void clear(void);
70  std::list<std::string> get_terminal_rules(void)const;
71  std::list<std::string> get_non_terminal_rules(void)const;
72 
73  void set_var(const std::string& name, const std::string& value);
74 
75 protected:
76 
77 private:
78  mutable std::string string2parse;
79 
80  typedef std::map< std::string, // rule left
81  std::list< jle::tuple<
82  std::list<std::string>, // right symbols
83  std::string> > > // transformation2
84  Container_rules ;
85  Container_rules non_terminal_rules ;
86  Container_rules terminal_rules ;
87 
88 
89  jle::tuple<bool, int>
90  execute_non_terminal (int srt2parse_pos, const std::string& non_terminal_code, AST_node_item& ast_node) const;
91 
92  jle::tuple<bool, int>
93  execute_terminal (int str2parse_pos, const std::string& terminal_code , AST_node_item& ast_node) const;
94 
95  jle::tuple<bool, int/*, jle::shared_ptr<AST_node_item> */>
96  execute_non_terminal_klein (int srt2parse_pos, const std::string& non_terminal_code, AST_node_item& ast_node) const;
97 
98  jle::tuple<bool, int/*, jle::shared_ptr<AST_node_item> */>
99  execute_terminal_klein (int srt2parse_pos, const std::string& non_terminal_code, AST_node_item& ast_node) const;
100 
101 
102  bool errors_in_rules;
103 
104  mutable int deeper_error_parsing_pos;
105  mutable std::set<std::string> deeper_error_expected_symbols;
106 
107  bool is_terminal(const std::string& str) const;
108 
109  std::string default_init_symbol;
110 
111 
112 
113 
114 
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;
118 
119 
120  // debug
121  mutable AST_node_item* ast_root_debug;
122 
123 
124  bool adding_rule_multi_line;
125  std::string building_rule;
126 
127  bool adding_template = false;
128  std::string template_name;
129  std::string building_template;
131 
132 
133 
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);
136 };
137 
138 
139 } } // namespace jle { namespace hp {
140 
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
Definition: ast.h:17
generic namespace
Definition: alarm.cpp:12