140140update (Category , Identifier , Val , [] , [(Category , Identifier , Val )]).
141141update (Category , Identifier , Val , [(Category , Identifier , _ )|Tail ], [(Category , Identifier , Val )|Tail ]).
142142update (Category , Identifier , Val , [Head |Tail ], [Head |Rest ]) :-
143- update(Category , Identifier , Val , Tail , Rest ).
143+ update(Category , Identifier , Val , Tail , Rest ).
144+
145+ %to evaluate program
146+ eval_program (t_program(Program ), Final_State ) :-
147+ eval_blk(Program , [] , Final_State ), ! .
148+
149+ %to evaluate different blocks
150+ eval_blk (t_blk(K ), State , Final_State ) :-
151+ eval_blk_section(K , State , Final_State ).
152+ eval_blk_section (t_blk(K , L ), State , Final_State ) :-
153+ eval_stms(K , State , S1 ),
154+ eval_blk_section(L , S1 , Final_State ).
155+ eval_blk_section (t_blk(K ), State , Final_State ) :-
156+ eval_stms(K , State , Final_State ).
157+
158+ %to evaluate different statements
159+ eval_stms (t_stms(Statement ), State , Final_State ) :-
160+ eval_declare(Statement , State , Final_State );
161+ eval_assign(Statement , State , Final_State );
162+ eval_bool(Statement , State , Final_State , _Val );
163+ eval_print(Statement , State , Final_State ).
164+ %eval_if(Statement, State, Final_State);
165+ %eval_while(Statement, State, Final_State);
166+ %eval_for_loop(Statement, State, Final_State);
167+ %eval_for_in_range(Statement, State, Final_State);
168+ %eval_ternary_cond(Statement, State, Final_State);
169+ %eval_iterate(Statement, State, Final_State).
170+
171+ %to evaluate different types of declarations
172+ eval_declare (t_declare(X , Y ), State , New_State ):-
173+ eval_tree(Y , Identifier ),
174+ update(X , Identifier , _ , State , New_State ).
175+ eval_declare (t_decint(int , Y , Z ), State , New_State ):-
176+ eval_tree(Y , Identifier ),
177+ eval_expr(Z , State , S1 , Val ),
178+ update(int , Identifier , Val , S1 , New_State ).
179+ eval_declare (t_decstr(string , Y , Z ), State , New_State ):-
180+ eval_tree(Y , Identifier ),
181+ eval_str(Z , State , NewEnv1 , Val ),
182+ update(string , Identifier , Val , NewEnv1 , New_State ).
183+ eval_declare (t_decbool(bool , Y , true ), State , New_State ):-
184+ eval_tree(Y , Identifier ),
185+ update(bool , Identifier , true , State , New_State ).
186+ eval_declare (t_decbool(bool , Y , false ), State , New_State ):-
187+ eval_tree(Y , Identifier ),
188+ update(bool , Identifier , false , State , New_State ).
0 commit comments