code: function() {
          var node, biop, prec, stack, biop_info, left, right, i;
  
          // First, try to get the leftmost thing
          // Then, check to see if there's a binary operator operating on that leftmost thing
          left = gobbleToken();
          biop = gobbleBinaryOp();
  
          // If there wasn't a binary operator, just return the leftmost node
          if (!biop) {
            return left;
          }
  
          // Otherwise, we need to start a stack to properly place the binary operations in their
          // precedence structure
          biop_info = { value: biop, prec: binaryPrecedence(biop) };
  
          right = gobbleToken();
          if (!right) {
            throwError("Expected expression after " + biop, index);
          }
          stack = [left, biop_info, right];
  
          // Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)
          while ((biop = gobbleBinaryOp())) {
            prec = binaryPrecedence(biop);
  
            if (prec === 0) {
              break;
            }
            biop_info = { value: biop, prec: prec };
  
            // Reduce: make a binary expression from the three topmost entries.
            while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {
              right = stack.pop();
              biop = stack.pop().value;
              left = stack.pop();
              node = createBinaryExpression(biop, left, right);
              stack.push(node);
            }
  
            node = gobbleToken();
            if (!node) {
              throwError("Expected expression after " + biop, index);
            }
            stack.push(biop_info, node);
          }
  
          i = stack.length - 1;
          node = stack[i];
          while (i > 1) {
            node = createBinaryExpression(stack[i - 1].value, stack[i - 2], node);
            i -= 2;
          }
          return node;
        }
docs: `index` stores the character number we are currently at while `length` is a constant All of the gobbles below will modify `index` as we move along