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 void copy(parse_tree_node
const & other
);
145 parse_tree_node
& operator=(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;
158 struct parse_tree_symbol
161 symbol_prefix::type type
;
164 parse_tree_symbol(parse_tree_symbol
const & other
);
165 ~parse_tree_symbol();
168 struct parse_tree_unary_operator_node
170 unary_operator_type::type type
;
171 parse_tree_node argument
;
174 struct parse_tree_binary_operator_node
176 binary_operator_type::type type
;
182 struct parse_tree_call
184 parse_tree_node function
;
185 parse_tree_nodes arguments
;
188 struct parse_tree_array
190 parse_tree_nodes elements
;
195 parse_tree_node conditional_term
;
196 executable_units body
;
199 struct if_else_statement
201 parse_tree_node conditional_term
;
207 struct for_each_statement
209 parse_tree_node container
;
210 executable_units body
;
219 executable_units body
;
222 struct while_statement
224 parse_tree_node conditional_term
;
225 executable_units body
;
228 struct executable_unit
230 executable_unit_type::type type
;
234 parse_tree_node
* statement_pointer
;
235 if_statement
* if_pointer
;
236 if_else_statement
* if_else_pointer
;
237 for_each_statement
* for_each_pointer
;
238 for_statement
* for_pointer
;
239 while_statement
* while_pointer
;
243 executable_unit(executable_unit
const & other
);
247 executable_unit
& operator=(executable_unit
const & other
);
252 string_vector arguments
;
253 executable_units body
;