code: private ParseTree parseMemberExpressionNoNew() {
      SourcePosition start = getTreeStartLocation();
      ParseTree operand;
      if (peekAsyncFunctionStart()) {
        operand = parseAsyncFunctionExpression();
      } else if (peekFunction()) {
        operand = parseFunctionExpression();
      } else {
        operand = parsePrimaryExpression();
      }
      while (peekMemberExpressionSuffix()) {
        switch (peekType()) {
          case OPEN_SQUARE:
            eat(TokenType.OPEN_SQUARE);
            ParseTree member = parseExpression();
            eat(TokenType.CLOSE_SQUARE);
            operand = new MemberLookupExpressionTree(
                getTreeLocation(start), operand, member);
            break;
          case PERIOD:
            eat(TokenType.PERIOD);
            IdentifierToken id = eatIdOrKeywordAsId();
            operand = new MemberExpressionTree(getTreeLocation(start), operand, id);
            break;
          case NO_SUBSTITUTION_TEMPLATE:
          case TEMPLATE_HEAD:
            operand = parseTemplateLiteral(operand);
            break;
          default:
            throw new RuntimeException("unreachable");
        }
      }
      return operand;
    }
docs: 11.2 Member Expression without the new production