Guest User

Untitled

a guest
Jun 23rd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. //Sorted it into tokens for simplicity
  2. var script = [
  3. "20","/","(","6","+","4",")","*","5","+","4"
  4. ];
  5.  
  6. //Currently processed token
  7. var currentToken;
  8. //Index in the script
  9. var index = 0;
  10.  
  11. //Get next token
  12. function nextToken()
  13. {
  14. index += 1;
  15. currentToken = script[index];
  16. }
  17.  
  18. //Check if current token is the same as the one we expect
  19. function acceptToken(type)
  20. {
  21. if(type == "num")
  22. {
  23. if(!isNaN(currentToken))
  24. {
  25. return true;
  26. }
  27. }
  28. else if(type == currentToken)
  29. {
  30. return true;
  31. }
  32. return false;
  33. }
  34.  
  35. //acceptToken but throw error if the currentToken is unexpected
  36. function expectToken(expected)
  37. {
  38. if(acceptToken(expected))
  39. {
  40. return true;
  41. }
  42. console.log("Error: invalid token");
  43. return false;
  44. }
  45.  
  46. //Parse factor (in this case either a number or a bracket)
  47. function parseFactor()
  48. {
  49.  
  50. if(acceptToken("num"))
  51. {
  52. var num = parseInt(currentToken);
  53. nextToken();
  54. return num;
  55. }
  56. else if(acceptToken("("))
  57. {
  58. nextToken()
  59. var num = parseSum();
  60. expectToken(")")
  61. nextToken()
  62. return num;
  63. }
  64. else
  65. {
  66. nextToken();
  67. console.log("Error: invalid token");
  68. }
  69. }
  70.  
  71. //Parse either division or multiplication
  72. function parseTerm()
  73. {
  74. var f1 = parseFactor();
  75. while(currentToken == "*" || currentToken == "/")
  76. {
  77. if(currentToken == "*")
  78. {
  79. nextToken();
  80. f1 *= parseFactor();
  81. }
  82. else if(currentToken == "/")
  83. {
  84. nextToken();
  85. f1 /= parseFactor();
  86. }
  87. }
  88. return f1;
  89. }
  90.  
  91. //Parse addition/subtraction
  92. function parseSum()
  93. {
  94. if(currentToken == "+" || currentToken == "-")
  95. {
  96. nextToken();
  97. }
  98. var p1 = parseTerm();
  99. while(currentToken == "+" || currentToken == "-")
  100. {
  101. if(currentToken == "+")
  102. {
  103. nextToken();
  104. p1 += parseTerm();
  105. }
  106. else if(currentToken == "-")
  107. {
  108. nextToken();
  109. p1 -= parseTerm();
  110. }
  111. }
  112. return p1;
  113. }
  114.  
  115. function main()
  116. {
  117. currentToken = script[index];
  118. var result = parseSum();
  119. console.log(result);
  120. }
  121.  
  122. main();
Add Comment
Please, Sign In to add comment