|
1 | 1 | %:- use_rendering(svgtree).
|
2 |
| -keyWords(X):- member(X,[for,if,then, while, endif, else, endfor, endwhile,do, true, false, list,isEmpty, pushFirst, |
3 |
| - pushLast,popFirst, popLast, print, begin, end, var]),write(X),write(" is a keyword. It cannot be initialized."),nl,abort. |
4 | 2 | endLine --> [;].
|
5 | 3 | equal --> [=].
|
6 | 4 | var --> [var].
|
7 | 5 | begin --> [begin].
|
8 | 6 | end --> [end].
|
9 | 7 |
|
10 | 8 | digit(X) --> [X], {number(X)} .
|
11 |
| -identifier(t_id(X)) --> [X],{atom(X), keyWords(X)}. |
| 9 | +identifier(t_id(X)) --> [X],{atom(X), X\=true, X\=false}. |
12 | 10 | anystring(t_string(X)) --> [X],{atom(X)}.
|
13 | 11 |
|
14 | 12 | program(t_program(X)) --> block(X).
|
|
31 | 29 | */
|
32 | 30 | commandList(t_commandList(X,Y)) --> commandI(X),endLine,commandList(Y).
|
33 | 31 | commandList(t_commandList(X)) --> commandI(X),endLine.
|
34 |
| -commandI(X) --> print(X). |
| 32 | +commandI(X) --> display(X). |
35 | 33 | commandI(X) --> commandInitialize(X).
|
36 | 34 | commandI(X) --> ifEval(X).
|
37 | 35 | commandI(X) --> forEval(X).
|
38 | 36 | commandI(X) --> whileEval(X).
|
39 | 37 | commandI(X) --> ternaryEval(X).
|
40 |
| -commandI(X) --> block(X). |
41 | 38 | commandI(X) --> list_push(X).
|
42 | 39 | commandI(X) --> list_pop(X).
|
43 | 40 | commandI(X) --> list_isEmpty(X).
|
|
126 | 123 | factor(X) --> booleanI(X).
|
127 | 124 | factor(X) -->['"'], anystring(X),['"'].
|
128 | 125 |
|
129 |
| -print(t_print(X)) --> [print],['('],expr(X),[')']. |
| 126 | +display(t_display(X)) --> [print],['('],expr(X),[')']. |
130 | 127 |
|
131 | 128 |
|
132 | 129 | /*--------------------------------------Program Evaluation--------------------------------------*/
|
|
149 | 146 | eval_commandI(t_commandInitialize(X,Y),EnvIn,EnvOut) :- eval_id(X,EnvIn,EnvIn,_Val1),eval_Identity(X,Id),
|
150 | 147 | eval_expr(Y, EnvIn, Env1, Val) ,update(Id,Val,Env1, EnvOut).
|
151 | 148 |
|
152 |
| -eval_commandI(t_print(X),EnvIn,EnvOut) :- eval_expr(X, EnvIn,EnvOut, Val),write(Val),nl. |
| 149 | +eval_commandI(t_display(X),EnvIn,EnvOut) :- eval_expr(X, EnvIn,EnvOut, Val),write(Val),nl. |
153 | 150 |
|
154 | 151 | % Evaluation Logic for IF loop and If-then-else-----------------------------------------------------------------------
|
155 | 152 | eval_commandI(t_ifEval(X,Y),EnvIn,EnvOut):- eval_bool(X,EnvIn,EnvOut1,true),
|
|
225 | 222 | eval_commandI(t_list_isempty_assign(t_id(X),t_id(Y)),EnvIn,EnvOut) :- lookup(X,EnvIn,Val), length(Val,Val1),Val1 > 0,
|
226 | 223 | update(Y,false,EnvIn,EnvOut).
|
227 | 224 |
|
228 |
| -eval_commandI(X,Env,NewEnv):-eval_block(X,Env,NewEnv). |
| 225 | + |
229 | 226 |
|
230 | 227 | eval_commandIFor(t_commandInitialize(t_id(X),Y),EnvIn,EnvOut) :-eval_expr(Y, EnvIn, Env1, Val),
|
231 | 228 | update(X,Val,Env1, EnvOut).
|
|
0 commit comments