'Return the expression in a human readable string.'

def __str__(self):

    string = ''
    stack = []
    for node in self:
        stack.append((node, []))
        while (len(stack[(-1)][1]) == stack[(-1)][0].arity):
            (prim, args) = stack.pop()
            string = prim.format(*args)
            if (len(stack) == 0):
                break
            stack[(-1)][1].append(string)
    return string
