parseLeftHandSideExpression_() {
    let start = this.getTreeStartLocation_();
    let operand = this.parseNewExpression_();

    // this test is equivalent to is member expression
    if (!(operand instanceof NewExpression) || operand.args !== null) {

      // The Call expression productions
      loop: while (true) {
        switch (peekType()) {
          case OPEN_PAREN:
            operand = this.toPrimaryExpression_(operand);
            operand = this.parseCallExpression_(start, operand);
            break;

          case OPEN_SQUARE:
            operand = this.toPrimaryExpression_(operand);
            operand = this.parseMemberLookupExpression_(start, operand);
            break;

          case PERIOD:
            operand = this.toPrimaryExpression_(operand);
            operand = this.parseMemberExpression_(start, operand);
            break;

          case NO_SUBSTITUTION_TEMPLATE:
          case TEMPLATE_HEAD:
            if (!this.options_.templateLiterals)
              break loop;
            operand = this.toPrimaryExpression_(operand);
            if (this.options_.templateLiterals) {
              operand = this.parseTemplateLiteral_(operand);
            }
            break;

          default:
            break loop;
        }
      }
    }
    return operand;
  }
LeftHandSideExpression :
  NewExpression
  CallExpression

@return {ParseTree}
@private