def METHOD_NAME(term_descs):
    """term_descs .. list of TermParse objects
    (sign, term_name, term_arg_names), where sign can be real or complex
    multiplier"""
    lc = ['+']  # Linear combination context.
    equal = Literal("=").setParseAction(rhs(lc))
    zero = Literal("0").suppress()
    point = Literal(".")
    e = CaselessLiteral("E")
    inumber = Word("+-" + nums, nums)
    fnumber = Combine(Word("+-" + nums, nums) +
                      Optional(point + Optional(Word(nums))) +
                      Optional(e + Word("+-" + nums, nums)))
    number = fnumber + Optional(Literal('j'), default='')
    add_op = oneOf('+ -')
    number_expr = Forward()
    number_expr << Optional(add_op) + ZeroOrMore('(') + number \
                + ZeroOrMore(add_op + number_expr) \
                + ZeroOrMore(')')
    ident = Word(alphas, alphanums + "_")
    integral = Combine((Literal('i') + Word(alphanums)) | Literal('i')
                       | Literal('a') | Word(nums))("integral")
    history = Optional('[' + inumber + ']', default='')("history")
    variable = Combine(Word(alphas, alphanums + '._') + history)
    derivative = Combine(Literal('d') + variable
                         + Literal('/') + Literal('dt'))
    # Not needed here, just for correspondence with create_arg_parser().
    derivative2 = Combine(OneOrMore(Literal('d')) + variable)
    trace = Combine(Literal('tr') + '('
                    + Optional(ident + Literal(','))
                    + variable
                    + ')', adjacent=False)
    generalized_var = derivative | derivative2 | trace | variable
    args = Group(delimitedList(generalized_var))
    flag = Literal('a')
    term = ((Optional(Literal('+') | Literal('-'), default='+')("sign")
             ^ Optional(number_expr + Literal('*').suppress(),
                        default=['1.0', ''])("mul"))
            + Combine(
                ident("name") + Optional(
                    "."
                    + (integral + "." + ident("region") + "." + flag("flag")
                       | integral + "." + ident("region")
                       | ident("region"))
                ))("term_desc") + "("
            + Optional(args, default=[''])("args") + ")")
    term.setParseAction(collect_term(term_descs, lc))
    rhs1 = equal + OneOrMore(term)
    rhs2 = equal + zero
    equation = StringStart() + OneOrMore(term) \
               + Optional(rhs1 | rhs2) + StringEnd()
    ## term.setDebug()
    return equation