Implemented the nullary/unary call operators
[fridhskrift.git] / fridh / function.hpp
blob5a36fb04d4d439ad18ff5fdd5f19cc92e3f913a5
1 #pragma once
3 #include <vector>
4 #include <string>
6 #include <ail/types.hpp>
8 namespace fridh
10 namespace executable_unit_type
12 enum type
14 statement,
15 assignment,
16 return_statement,
17 if_statement,
18 if_else_statement,
19 for_each_statement,
20 for_statement,
21 while_statement,
25 namespace assignment_type
27 enum type
29 assignment,
30 addition,
31 subtraction,
32 multiplication,
33 division,
34 modulo,
35 exponentiation,
37 increment,
38 decrement,
42 namespace unary_operator_type
44 enum type
46 negation,
47 logical_not,
48 binary_not,
52 namespace binary_operator_type
54 enum type
56 addition,
57 subtraction,
58 multiplication,
59 division,
60 modulo,
61 exponentiation,
63 less_than,
64 less_than_or_equal,
65 greater_than,
66 greater_than_or_equal,
67 unequal,
68 equal,
70 logical_and,
71 logical_or,
73 shift_left,
74 shift_right,
76 binary_and,
77 binary_or,
78 binary_xor,
80 selection,
84 namespace parse_tree_node_type
86 enum type
88 uninitialised,
90 variable,
91 symbol,
92 unary_operator_node,
93 binary_operator_node,
94 call,
95 array,
97 call_operator,
98 spaced_call_operator,
102 namespace symbol_prefix
104 enum type
106 none,
107 scope_operator,
108 class_operator,
112 struct
113 parse_tree_node,
114 parse_tree_symbol,
115 executable_units;
117 typedef std::vector<parse_tree_node> parse_tree_nodes;
118 typedef std::vector<parse_tree_symbol> parse_tree_symbols;
119 typedef std::vector<executable_unit> executable_units;
121 struct parse_tree_symbol
123 std::string name;
124 symbol_prefix::type type;
126 parse_tree_symbol();
129 struct parse_tree_unary_operator_node
131 unary_operator_type type;
132 parse_tree_node argument;
135 struct parse_tree_binary_operator_node
137 binary_operator_type type;
138 parse_tree_node
139 left_argument,
140 right_argument;
143 struct parse_tree_call
145 parse_tree_node function;
146 parse_tree_nodes arguments;
149 struct parse_tree_array
151 parse_tree_nodes elements;
154 struct parse_tree_node
156 parse_tree_node_type::type type;
157 union
159 variable * variable_pointer;
160 parse_tree_symbol * symbol_pointer;
161 parse_tree_unary_operator_node * unary_operator_pointer;
162 parse_tree_binary_operator_node * binary_operator_pointer;
163 parse_tree_call * call_pointer;
164 parse_tree_array * array_pointer;
167 parse_tree_node();
168 parse_tree_node(parse_tree_node_type::type type);
169 parse_tree_node(variable * variable_pointer);
170 parse_tree_node(unary_operator_type::type unary_operator);
171 parse_tree_node(binary_operator_type::type binary_operator);
172 parse_tree_node(parse_tree_nodes & elements);
174 void is_call();
177 struct assignment_statement
179 assignment_type::type type;
180 parse_tree_symbols symbols;
181 parse_tree_node term;
184 struct if_statement
186 parse_tree_node conditional_term;
187 parse_tree_nodes body;
190 struct if_else_statement
192 parse_tree_node conditional_term;
193 parse_tree_nodes
194 if_body,
195 else_body;
198 struct for_each_statement
200 parse_tree_symbol container;
201 parse_tree_nodes body;
204 struct for_statement
206 parse_tree_node
207 initialisation,
208 conditional,
209 iteration;
210 parse_tree_nodes body;
213 struct while_statement
215 parse_tree_node conditional_term;
216 parse_tree_nodes body;
219 struct executable_unit
221 executable_unit_type::type type;
223 union
225 parse_tree_node * statement_pointer;
226 if_statement * if_pointer;
227 if_else_statement * if_else_pointer;
228 for_each_statement * for_each_pointer;
229 for_statement * for_pointer;
230 while_statement * while_pointer;
234 struct function
236 string_vector arguments;
237 executable_units units;