Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let isAdditionOperator =
  2.     (token) => (token === '+' || token === 'add')
  3.  
  4. let isSubtractionOperator =
  5.     (token) => (token === '-' || token ==='sub')
  6.  
  7. let isMultiplicationOperator =
  8.     (token) => (token === '*' || token === 'mul')
  9.  
  10. let isDivisionOperator =
  11.     (token) => (token === '/' || token == 'div')
  12.  
  13. let isNumberLiteral =
  14.     (token) => !isNaN(token)
  15.  
  16. let calculate = (tokens) => {
  17.     let currentToken = tokens.shift();
  18.  
  19.     if(isNumberLiteral(currentToken)) {
  20.         return parseFloat(currentToken);
  21.     }
  22.     if(isAdditionOperator(currentToken)) {
  23.         return calculate(tokens) + calculate(tokens);
  24.     }
  25.     if(isSubtractionOperator(currentToken)) {
  26.         return - calculate(tokens);
  27.     }
  28.     if(isMultiplicationOperator(currentToken)) {
  29.         return calculate(tokens) * calculate(tokens);
  30.     }
  31.     if(isDivisionOperator(currentToken)) {
  32.         return calculate(tokens) / calculate(tokens);
  33.     }
  34.     throw 'Invalid token ' + currentToken;
  35. }
  36. let expression = "* + 1 2 * 3 + 7 - 2"
  37. let tokens = expression.split(' ');
  38. console.log(calculate(tokens))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement