6 #include <ail/types.hpp>
10 namespace executable_unit_type
26 namespace assignment_type
40 namespace crement_type
49 namespace unary_operator_type
59 namespace binary_operator_type
73 greater_than_or_equal
,
91 namespace parse_tree_node_type
100 binary_operator_node
,
105 spaced_call_operator
,
111 namespace symbol_prefix
126 typedef std::vector
<parse_tree_node
> parse_tree_nodes
;
127 typedef std::vector
<parse_tree_symbol
> parse_tree_symbols
;
128 typedef std::vector
<executable_unit
> executable_units
;
130 struct parse_tree_symbol
133 symbol_prefix::type type
;
138 struct parse_tree_unary_operator_node
140 unary_operator_type type
;
141 parse_tree_node argument
;
144 struct parse_tree_binary_operator_node
146 binary_operator_type type
;
152 struct parse_tree_call
154 parse_tree_node function
;
155 parse_tree_nodes arguments
;
158 struct parse_tree_array
160 parse_tree_nodes elements
;
163 struct parse_tree_node
165 parse_tree_node_type::type type
;
168 variable
* variable_pointer
;
169 parse_tree_symbol
* symbol_pointer
;
170 parse_tree_unary_operator_node
* unary_operator_pointer
;
171 parse_tree_binary_operator_node
* binary_operator_pointer
;
172 parse_tree_call
* call_pointer
;
173 parse_tree_array
* array_pointer
;
177 parse_tree_node(parse_tree_node_type::type type
);
178 parse_tree_node(variable
* variable_pointer
);
179 parse_tree_node(unary_operator_type::type unary_operator
);
180 parse_tree_node(binary_operator_type::type binary_operator
);
181 parse_tree_node(parse_tree_nodes
& elements
);
186 struct assignment_statement
188 assignment_type::type type
;
189 parse_tree_symbols symbols
;
190 parse_tree_node term
;
193 struct crement_statement
195 parse_tree_symbol symbol
;
196 crement_type::type type
;
201 parse_tree_node conditional_term
;
202 executable_units body
;
205 struct if_else_statement
207 parse_tree_node conditional_term
;
213 struct for_each_statement
215 parse_tree_symbol container
;
216 executable_units body
;
225 executable_units body
;
228 struct while_statement
230 parse_tree_node conditional_term
;
231 executable_units body
;
234 struct executable_unit
236 executable_unit_type::type type
;
240 parse_tree_node
* statement_pointer
;
241 assignment_stamtent
* assignment_pointer
;
242 crement_statement
* crement_pointer
;
243 if_statement
* if_pointer
;
244 if_else_statement
* if_else_pointer
;
245 for_each_statement
* for_each_pointer
;
246 for_statement
* for_pointer
;
247 while_statement
* while_pointer
;
253 string_vector arguments
;
254 executable_units body
;
257 bool convert_lexeme_to_assignment_type(lexeme_type::type input
, assignment_type::type
& output
);
258 bool convert_lexeme_to_crement_type(lexeme_type::type input
, crement_type::type
& output
);
259 bool is_assignment_lexeme(lexeme_type::type input
);