<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse_declaration_expressn_fncall(self, name, params, es):
 """ Parses out cromwell's built-in function calls. Some of these are special and need minor adjustments, for example length(), which is equivalent to python's len() function. Or sub, which is equivalent to re.sub(), but needs a rearrangement of input variables. Known to be supported: sub, size, read_tsv, length, select_first. :param name: :param params: :param es: :return: """

        # name of the function
        if isinstance(name, wdl_parser.Terminal):
            if name.str:
                # use python's built-in for length()
                if name.source_string == 'length':
                    es = es + 'len('
                elif name.source_string == 'stdout':
                    return es + 'stdout'
                else:
                    es = es + name.source_string + '('
            else:
                raise NotImplementedError
        elif isinstance(name, wdl_parser.Ast):
            raise NotImplementedError
        elif isinstance(name, wdl_parser.AstList):
            raise NotImplementedError

        # use python's re.sub() for sub()
        if name.source_string == 'sub':
            es_params = self.parse_declaration_expressn_fncall_SUBparams(params)
        else:
            es_params = self.parse_declaration_expressn_fncall_normalparams(params)

        if name.source_string == 'glob':
            return es + es_params + ', tempDir)'
        elif name.source_string == 'size':
            return es + es_params + ', fileStore=fileStore)'
        else:
            return es + es_params + ')'