11let 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
1311let builtins = {
@@ -26,9 +24,11 @@ let binaryOperators = {
2624}
2725
2826interpret = ( 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
3434varDefinition = ( 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