Skip to content

Commit 71dbb0a

Browse files
committed
Eval Program Predicate
1 parent 1108b9e commit 71dbb0a

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

src/SARS.pl

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,49 @@
140140
update(Category, Identifier, Val, [], [(Category, Identifier, Val)]).
141141
update(Category, Identifier, Val, [(Category, Identifier, _)|Tail], [(Category, Identifier, Val)|Tail]).
142142
update(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

Comments
 (0)