コード例 #1
0
def emit_action(a):
    if isinstance(a, ia.AssignAction):
        vars = [
            (x if isinstance(x, lg.Variable) else lg.Variable('$V' + str(idx)))
            for x, idx in enumerate(a.args[0].args)
        ]
        emit('    ' + a.args[0].rep.name + ' ::= ')
        rhs = a.args[1]
        if len(vars) != 0:
            cond = lg.And(
                *[lg.Eq(v, w) for v, w in zip(vars, a.args[0].args) if v != w])
            rhs = lg.Ite(cond, rhs, lg.Apply(a.func, vars))
        emit_expr(rhs)
    elif isinstance(a, ia.Sequence):
        emit('(')
        first = True
        for x in a.args:
            if not first:
                emit(';\n')
                emit_action(x)
            first = False
        emit(')')
    elif isinstance(a, ia.IfAction):
        emit('(PL.pterm.ite ')
        emit_expr(a.args[0])
        emit_action(a.args[1])
        if len(a.args) > 2:
            emit_action(a.args[1])
        else:
            emit('PL.pterm.skip')
    else:
        raise iu.IvyError(a, 'action not supported yet')
コード例 #2
0
ファイル: ivy_logic.py プロジェクト: appcoreopc/ivy
def ite_drop_annotations(self, inferred_sort, annotated_vars):
    arg1 = self.args[1].drop_annotations(inferred_sort, annotated_vars)
    arg2 = self.args[2].drop_annotations(True, annotated_vars)
    arg0 = self.args[0].drop_annotations(True, annotated_vars)
    return lg.Ite(arg0, arg1, arg2)