6 #include <ail/types.hpp>
8 #include <fridh/construction.hpp>
12 namespace executable_unit_type
28 namespace unary_operator_type
41 namespace binary_operator_type
55 greater_than_or_equal
,
73 subtraction_assignment
,
74 multiplication_assignment
,
77 exponentiation_assignment
,
81 namespace parse_tree_node_type
101 namespace symbol_prefix
111 struct parse_tree_node
;
112 struct parse_tree_symbol
;
113 struct executable_unit
;
115 typedef std::vector
<parse_tree_node
> parse_tree_nodes
;
116 typedef std::vector
<parse_tree_symbol
> parse_tree_symbols
;
117 typedef std::vector
<executable_unit
> executable_units
;
119 struct parse_tree_symbol
;
120 struct parse_tree_unary_operator_node
;
121 struct parse_tree_binary_operator_node
;
122 struct parse_tree_call
;
123 struct parse_tree_array
;
125 struct parse_tree_node
127 parse_tree_node_type::type type
;
130 variable
* variable_pointer
;
131 parse_tree_symbol
* symbol_pointer
;
132 parse_tree_unary_operator_node
* unary_operator_pointer
;
133 parse_tree_binary_operator_node
* binary_operator_pointer
;
134 parse_tree_call
* call_pointer
;
135 parse_tree_array
* array_pointer
;
139 parse_tree_node(parse_tree_node
const & other
);
142 parse_tree_node
& operator=(parse_tree_node
const & other
);
144 void copy(parse_tree_node
const & other
);
147 parse_tree_node(parse_tree_node_type::type type
);
148 parse_tree_node(variable
* variable_pointer
);
149 parse_tree_node(unary_operator_type::type unary_operator
);
150 parse_tree_node(binary_operator_type::type binary_operator
);
151 parse_tree_node(parse_tree_nodes
& elements
);
154 bool is_post_fix() const;
155 std::string
to_string() const;
156 bool is_call_node() const;
159 struct parse_tree_symbol
162 symbol_prefix::type type
;
167 struct parse_tree_unary_operator_node
169 unary_operator_type::type type
;
170 parse_tree_node argument
;
173 struct parse_tree_binary_operator_node
175 binary_operator_type::type type
;
181 struct parse_tree_call
183 parse_tree_node function
;
184 parse_tree_nodes arguments
;
187 struct parse_tree_array
189 parse_tree_nodes elements
;
194 parse_tree_node conditional_term
;
195 executable_units body
;
198 struct if_else_statement
200 parse_tree_node conditional_term
;
206 struct for_each_statement
208 parse_tree_node container
;
209 executable_units body
;
218 executable_units body
;
221 struct while_statement
223 parse_tree_node conditional_term
;
224 executable_units body
;
227 struct executable_unit
229 executable_unit_type::type type
;
233 parse_tree_node
* statement_pointer
;
234 if_statement
* if_pointer
;
235 if_else_statement
* if_else_pointer
;
236 for_each_statement
* for_each_pointer
;
237 for_statement
* for_pointer
;
238 while_statement
* while_pointer
;
242 executable_unit(executable_unit
const & other
);
245 executable_unit
& operator=(executable_unit
const & other
);
247 void copy(executable_unit
const & other
);
253 string_vector arguments
;
254 executable_units body
;