185185 update(bool , Identifier , true , State , New_State ).
186186eval_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