Advertisement
Guest User

Untitled

a guest
Sep 25th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var SE="Syntax Error";
  2.  
  3. function parse(str) { // returns integer expression result or SE
  4.    var text=str;
  5.    var scan=1;
  6.    return parse_sum();
  7.  
  8.    function parse_sum() {
  9.       var number, number2;
  10.       if (number=parse_product()==SE) return SE;
  11.       while (true) {
  12.         skip_blanks();
  13.         if (match("+") {
  14.            number2=parse_product();
  15.            if (number2==SE) return SE;
  16.            number+=number2;
  17.         }
  18.         else if (match('-')) {
  19.                 { number2=parse_product();
  20.                   if (number2==SE) return SE;
  21.                   number-=number2;
  22.                 }
  23.              else return number;
  24.       }
  25.    }
  26.  
  27.    function parse_product() {
  28.       var number, number2;
  29.       if (number=parse_number()==SE) return SE;
  30.       while (true) {
  31.         if (match("*") {
  32.             number2=parse_term();
  33.             if (number2==SE) return SE;
  34.             number*=number2;
  35.           }
  36.           else if (match('/')) {
  37.                   number2=parse_term();
  38.                   if (number2==SE) return SE;
  39.                   number/=number2;
  40.                }
  41.                else return number;
  42.       }
  43.    }
  44.  
  45.    function parse_term() {
  46.       var number;
  47.       skip_blanks();
  48.       if (match("(")) {
  49.          number=parse_sum();
  50.          if (number=SE) return SE;
  51.          skip_blanks();
  52.          if (!match(")") return SE;
  53.       }
  54.       else if match("-") {
  55.               number= - parse_term();
  56.            }
  57.            else if (number=parse_number()==SE) return SE;
  58.       return number;
  59.    }
  60.  
  61.    function skip_blanks() {
  62.       while (match(" ")) { };
  63.       return;
  64.     }
  65.  
  66.     function parse_number() {
  67.        number=0;
  68.        if (is_digit()) {
  69.           while (is_digit()) {}
  70.           return number;
  71.         }
  72.         else return SE;
  73.     }
  74.  
  75.     var number;
  76.     function is_digit() { // following 2 lines are likely wrong in detail but not intent
  77.        if (text[scan]>="0" && text[scan]<="9") {
  78.           number=number*10+text[scan].toInt();
  79.           return true;
  80.        }
  81.        else return false;
  82.     }
  83.  
  84.    function match(c) {
  85.        if (text[scan]==c)
  86.           { scan++; return true }
  87.        else return false;
  88.     }
  89.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement