diff options
author | David Walter Seikel | 2012-01-06 18:50:14 +1000 |
---|---|---|
committer | David Walter Seikel | 2012-01-06 18:50:14 +1000 |
commit | f1a48f173922785a4f18ad789f1d0cd7080bb3d1 (patch) | |
tree | 94f212d1a5dd924b5c4e25db851d19fee50a8efa /LuaSL/src/LuaSL_LSL_tree.c | |
parent | Precedence changes. (diff) | |
download | SledjHamr-f1a48f173922785a4f18ad789f1d0cd7080bb3d1.zip SledjHamr-f1a48f173922785a4f18ad789f1d0cd7080bb3d1.tar.gz SledjHamr-f1a48f173922785a4f18ad789f1d0cd7080bb3d1.tar.bz2 SledjHamr-f1a48f173922785a4f18ad789f1d0cd7080bb3d1.tar.xz |
Added most of the expression parser.
Diffstat (limited to 'LuaSL/src/LuaSL_LSL_tree.c')
-rw-r--r-- | LuaSL/src/LuaSL_LSL_tree.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/LuaSL/src/LuaSL_LSL_tree.c b/LuaSL/src/LuaSL_LSL_tree.c index a69b0d3..88768e0 100644 --- a/LuaSL/src/LuaSL_LSL_tree.c +++ b/LuaSL/src/LuaSL_LSL_tree.c | |||
@@ -139,6 +139,13 @@ int evaluateExpression(LSL_Expression *exp, int old) | |||
139 | #endif | 139 | #endif |
140 | case LSL_EXPRESSION : | 140 | case LSL_EXPRESSION : |
141 | { | 141 | { |
142 | #ifdef LUASL_DEBUG | ||
143 | #ifdef LUASL_USE_ENUM | ||
144 | printf(" %s ", LSL_Tokens[exp->expression - LSL_COMMA].token); | ||
145 | #else | ||
146 | printf(" # "); | ||
147 | #endif | ||
148 | #endif | ||
142 | switch (exp->expression) | 149 | switch (exp->expression) |
143 | { | 150 | { |
144 | #ifdef LUASL_USE_ENUM | 151 | #ifdef LUASL_USE_ENUM |
@@ -162,30 +169,25 @@ int evaluateExpression(LSL_Expression *exp, int old) | |||
162 | case LSL_ANGLE_OPEN : | 169 | case LSL_ANGLE_OPEN : |
163 | case LSL_ANGLE_CLOSE : | 170 | case LSL_ANGLE_CLOSE : |
164 | case LSL_TYPECAST : | 171 | case LSL_TYPECAST : |
165 | case LSL_BIT_NOT : | ||
166 | case LSL_BOOL_NOT : | ||
167 | case LSL_NEGATION : | ||
168 | break; | 172 | break; |
173 | #endif | ||
174 | case LSL_BIT_NOT : return ~ evaluateExpression(exp->right, old); | ||
175 | case LSL_BOOL_NOT : return ! evaluateExpression(exp->right, old); | ||
176 | case LSL_NEGATION : return 0 - evaluateExpression(exp->right, old); | ||
169 | case LSL_DIVIDE : return evaluateExpression(exp->left, old) / evaluateExpression(exp->right, old); | 177 | case LSL_DIVIDE : return evaluateExpression(exp->left, old) / evaluateExpression(exp->right, old); |
178 | #ifdef LUASL_USE_ENUM | ||
170 | case LSL_MODULO : return evaluateExpression(exp->left, old) % evaluateExpression(exp->right, old); | 179 | case LSL_MODULO : return evaluateExpression(exp->left, old) % evaluateExpression(exp->right, old); |
171 | #endif | 180 | #endif |
172 | case LSL_MULTIPLY : | 181 | case LSL_MULTIPLY : return evaluateExpression(exp->left, old) * evaluateExpression(exp->right, old); |
173 | #ifdef LUASL_DEBUG | ||
174 | printf(" * "); | ||
175 | #endif | ||
176 | return evaluateExpression(exp->left, old) * evaluateExpression(exp->right, old); | ||
177 | #ifdef LUASL_USE_ENUM | 182 | #ifdef LUASL_USE_ENUM |
178 | case LSL_DOT_PRODUCT : break; | 183 | case LSL_DOT_PRODUCT : break; |
179 | case LSL_CROSS_PRODUCT : break; | 184 | case LSL_CROSS_PRODUCT : break; |
180 | case LSL_SUBTRACT : return evaluateExpression(exp->left, old) - evaluateExpression(exp->right, old); | ||
181 | #endif | ||
182 | case LSL_ADD : | ||
183 | #ifdef LUASL_DEBUG | ||
184 | printf(" + "); | ||
185 | #endif | 185 | #endif |
186 | return evaluateExpression(exp->left, old) + evaluateExpression(exp->right, old); | 186 | case LSL_SUBTRACT : return evaluateExpression(exp->left, old) - evaluateExpression(exp->right, old); |
187 | case LSL_ADD : return evaluateExpression(exp->left, old) + evaluateExpression(exp->right, old); | ||
187 | #ifdef LUASL_USE_ENUM | 188 | #ifdef LUASL_USE_ENUM |
188 | case LSL_CONCATENATE : break; | 189 | case LSL_CONCATENATE : break; |
190 | #endif | ||
189 | case LSL_LEFT_SHIFT : return evaluateExpression(exp->left, old) << evaluateExpression(exp->right, old); | 191 | case LSL_LEFT_SHIFT : return evaluateExpression(exp->left, old) << evaluateExpression(exp->right, old); |
190 | case LSL_RIGHT_SHIFT : return evaluateExpression(exp->left, old) >> evaluateExpression(exp->right, old); | 192 | case LSL_RIGHT_SHIFT : return evaluateExpression(exp->left, old) >> evaluateExpression(exp->right, old); |
191 | case LSL_LESS_THAN : return evaluateExpression(exp->left, old) < evaluateExpression(exp->right, old); | 193 | case LSL_LESS_THAN : return evaluateExpression(exp->left, old) < evaluateExpression(exp->right, old); |
@@ -199,7 +201,6 @@ int evaluateExpression(LSL_Expression *exp, int old) | |||
199 | case LSL_BIT_OR : return evaluateExpression(exp->left, old) | evaluateExpression(exp->right, old); | 201 | case LSL_BIT_OR : return evaluateExpression(exp->left, old) | evaluateExpression(exp->right, old); |
200 | case LSL_BOOL_OR : return evaluateExpression(exp->left, old) || evaluateExpression(exp->right, old); | 202 | case LSL_BOOL_OR : return evaluateExpression(exp->left, old) || evaluateExpression(exp->right, old); |
201 | case LSL_BOOL_AND : return evaluateExpression(exp->left, old) && evaluateExpression(exp->right, old); | 203 | case LSL_BOOL_AND : return evaluateExpression(exp->left, old) && evaluateExpression(exp->right, old); |
202 | #endif | ||
203 | } | 204 | } |
204 | break; | 205 | break; |
205 | } | 206 | } |