Skip to content

Commit c88c541

Browse files
authored
Merge pull request #11 from ssuryaw5/evalAssignAndBool
Evaluating assignment operations and boolean expressions
2 parents bea8bae + 07651a9 commit c88c541

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

src/SARS.pl

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,53 @@
185185
update(bool, Identifier, true, State, New_State).
186186
eval_declare(t_decbool(bool, Y, false), State, New_State):-
187187
eval_tree(Y, Identifier),
188-
update(bool, Identifier, false, State, New_State).
188+
update(bool, Identifier, false, State, New_State).
189+
190+
%to evaluate assignment operations
191+
eval_assign(t_assignmnt(X, Y), State, New_State) :-
192+
eval_expr(Y, State, S1, Val),
193+
check_type(Val, T),
194+
eval_tree(X, Identifier),
195+
lookup_category(Identifier, S1, T1),
196+
T =@= T1,
197+
update(T, Identifier, Val, S1, New_State).
198+
eval_assign(t_assignmnt(X, Y), State, New_State) :-
199+
eval_str(Y, State, State, Val),
200+
check_type(Val, T),
201+
eval_tree(X, Identifier),
202+
lookup_category(Identifier, State, T1),
203+
T =@= T1,
204+
update(T, Identifier, Val, State, New_State).
205+
eval_assign(t_assignmnt(X, Y), State, New_State) :-
206+
eval_bool(Y, State, State, Val),
207+
check_type(Val, T),
208+
eval_tree(X, Identifier),
209+
lookup_category(Identifier, State, T1),
210+
T =@= T1,
211+
update(T, Identifier, Val, State, New_State).
212+
213+
214+
215+
%to evaluate boolean conditions
216+
eval_bool(true, _Env1, _NewEnv, true).
217+
eval_bool(false, _Env1, _NewEnv,false).
218+
eval_bool(t_bool_NOT(B), State, New_State, Val) :-
219+
(eval_bool(B, State, New_State, V1);eval_cond(B, State, New_State, V1)),
220+
not(V1, V2),
221+
Val = V2.
222+
eval_bool(t_bool_AND(X, Y), State, New_State, Val) :-
223+
eval_bool(X, State, New_State, V1),
224+
eval_bool(Y, State, New_State, V2),
225+
and(V1, V2, Val).
226+
eval_bool(t_bool_AND(X, Y), State, New_State, Val) :-
227+
eval_cond(X, State, New_State, V1),
228+
eval_cond(Y, State, New_State, V2),
229+
and(V1, V2, Val).
230+
eval_bool(t_bool_OR(X, Y), State, New_State, Val) :-
231+
eval_bool(X, State, New_State, V1),
232+
eval_bool(Y, State, New_State, V2),
233+
or(V1, V2, Val).
234+
eval_bool(t_bool_OR(X, Y), State, New_State, Val) :-
235+
eval_cond(X, State, New_State, V1),
236+
eval_cond(Y, State, New_State, V2),
237+
or(V1, V2, Val)

0 commit comments

Comments
 (0)