示例#1
0
def variables_ast(ast):
    if isinstance(ast, Variable):
        yield ast
    elif ast != None and not isinstance(ast, str):
        #        if not hasattr(ast,'args'):
        #            print ast
        #            print type(ast)
        #        if any(isinstance(c,list) for c in ast.args):
        #            print "foo: " + repr(ast)
        for arg in ast.args:
            for x in variables_ast(arg):
                yield x


used_variables_ast = gen_to_set(variables_ast)


def compose_atoms(pr, atom):
    if atom == None:
        return pr
    hname = pr.rep if isinstance(atom.rep, This) else compose_names(
        pr.rep, atom.rep)
    args = pr.args + atom.args
    res = type(atom)(hname, args)
    copy_attributes_ast(atom, res)
    return res


def is_true(ast):
    return isinstance(ast, And) and len(ast.args) == 0
示例#2
0
文件: ivy_ast.py 项目: ZZHGit/ivy
def distinct_variable_renaming(vars1,vars2):
    rn = UniqueRenamer('',(v.rep for v in vars2))
    return dict((v.rep,rename_variable(v,rn(v.rep))) for v in vars1)

def rename_variable(v,name):
    return type(v)(name,v.sort)


def variables_ast(ast):
    if isinstance(ast,Variable):
        yield ast
    elif not isinstance(ast,str):
        for arg in ast.args:
            for x in variables_ast(arg):
                yield x

used_variables_ast = gen_to_set(variables_ast)

def compose_atoms(pr,atom):
    hname = compose_names(pr.rep,atom.rep)
    args = pr.args + atom.args
    res = type(atom)(hname,args)
    copy_attributes_ast(atom,res)
    return res

def is_true(ast):
    return isinstance(ast,And) and len(ast.args) == 0

def is_false(ast):
    return isinstance(ast,Or) and len(ast.args) == 0