Skip to content

Commit d285a22

Browse files
committed
if-else statement
1 parent 06a8db9 commit d285a22

1 file changed

Lines changed: 19 additions & 8 deletions

File tree

interpret.js

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
let program = [
22
{ def: { 'a': 10 } },
33
{ def: { 'b': 20 } },
4-
{ print: { '>': [{ val: 'b' }, { val: 'a' }] } },
5-
{ print: { '<': [{ val: 'a' }, { val: 'b' }] } },
6-
{ print: { '==': [{ val: 'a' }, { val: 'b' }] } },
7-
//b > a OR a == b
8-
{ print: { '||': [{ '>': [{ val: 'b' }, { val: 'a' }] }, { '==': [{ val: 'a' }, { val: 'b' }] }] } },
9-
//b > a AND a ==b
10-
{ print: { '&&': [{ '>': [{ val: 'b' }, { val: 'a' }] }, { '==': [{ val: 'a' }, { val: 'b' }] }] } },
4+
{
5+
if: { '>': [{ val: 'a' }, { val: 'b' }] },
6+
then: [{ print: 'a is greater than b' }],
7+
else: [{ print: 'b is greater than a' }]
8+
}
119
]
1210

1311
let builtins = {
@@ -26,9 +24,11 @@ let binaryOperators = {
2624
}
2725

2826
interpret = (program, state) => {
27+
let returnValue;
2928
for (let stmt of program) {
30-
exec(stmt, state)
29+
returnValue = exec(stmt, state)
3130
}
31+
return returnValue;
3232
};
3333

3434
varDefinition = (defObj, state) => {
@@ -57,6 +57,17 @@ exec = (stmt, state) => {
5757
} else if (key === 'val') {
5858
let firstArgument = stmt[key]
5959
return varValue(firstArgument, state)
60+
} else if (key === 'if') {
61+
let condition = stmt[key]
62+
if (exec(condition, state)) {
63+
let thenStatements = stmt['then']
64+
return interpret(thenStatements, state)
65+
} else {
66+
let elseStatements = stmt['else'];
67+
if (typeof elseStatements !== 'undefined') {
68+
return interpret(elseStatements, state)
69+
}
70+
}
6071
} else {
6172
console.error('unknown instruction: ' + key)
6273
}

0 commit comments

Comments
 (0)