コード例 #1
0
def p_expr_noteq(p: Any) -> None:
    '''expr : expr NOTEQ expr
            | expr NOTEQ2 expr'''
    l: syntax.Expr = p[1]
    r: syntax.Expr = p[3]
    span = loc_join(l.span, r.span)
    p[0] = syntax.BinaryExpr('NOTEQ', l, r, span=span)
コード例 #2
0
def negate_clause(c: Expr) -> Expr:
    if isinstance(c, syntax.Bool):
        return syntax.Bool(not c.val)
    elif isinstance(c, syntax.UnaryExpr):
        assert c.op == 'NOT'
        return c.arg
    elif isinstance(c, syntax.BinaryExpr):
        assert c.op in ['EQUAL', 'NOTEQ']
        op = 'NOTEQ' if c.op == 'EQUAL' else 'EQUAL'
        return syntax.BinaryExpr(op, c.arg1, c.arg2)
    elif isinstance(c, syntax.NaryExpr):
        assert c.op == 'OR'
        return syntax.NaryExpr('AND', [negate_clause(arg) for arg in c.args])
    elif isinstance(c, syntax.AppExpr) or isinstance(c, syntax.Id):
        return syntax.Not(c)
    else:
        assert False, f'unsupported expression {c} in negate_clause'
コード例 #3
0
def negate_clause(c: Expr) -> Expr:
    if isinstance(c, syntax.Bool):
        return syntax.Bool(not c.val)
    elif isinstance(c, syntax.UnaryExpr):
        assert c.op == 'NOT'
        return c.arg
    elif isinstance(c, syntax.BinaryExpr):
        assert c.op in ['EQUAL', 'NOTEQ']
        op = 'NOTEQ' if c.op == 'EQUAL' else 'EQUAL'
        return syntax.BinaryExpr(op, c.arg1, c.arg2)
    elif isinstance(c, syntax.NaryExpr):
        assert c.op == 'OR'
        return syntax.NaryExpr('AND', tuple(negate_clause(arg) for arg in c.args))
    elif isinstance(c, syntax.AppExpr) or isinstance(c, syntax.Id):
        return syntax.Not(c)
    elif isinstance(c, syntax.QuantifierExpr):
        assert c.quant == 'FORALL'
        return syntax.QuantifierExpr('EXISTS', c.get_vs(), negate_clause(c.body))
    else:
        assert False, f'unsupported expression {c} in negate_clause'
コード例 #4
0
ファイル: parser.py プロジェクト: jrkoenig/mypyvy
def p_expr_noteq(p: Any) -> None:
    'expr : expr NOTEQ expr'
    p[0] = syntax.BinaryExpr(p.slice[2], 'NOTEQ', p[1], p[3])
コード例 #5
0
ファイル: parser.py プロジェクト: jrkoenig/mypyvy
def p_expr_eq(p: Any) -> None:
    'expr : expr EQUAL expr'
    p[0] = syntax.BinaryExpr(p.slice[2], 'EQUAL', p[1], p[3])
コード例 #6
0
ファイル: parser.py プロジェクト: jrkoenig/mypyvy
def p_expr_implies(p: Any) -> None:
    'expr : expr IMPLIES expr'
    p[0] = syntax.BinaryExpr(p.slice[2], 'IMPLIES', p[1], p[3])
コード例 #7
0
ファイル: parser.py プロジェクト: jrkoenig/mypyvy
def p_expr_iff(p: Any) -> None:
    'expr : expr IFF expr'
    p[0] = syntax.BinaryExpr(p.slice[2], 'IFF', p[1], p[3])
コード例 #8
0
def p_expr_implies(p: Any) -> None:
    'expr : expr IMPLIES expr'
    l: syntax.Expr = p[1]
    r: syntax.Expr = p[3]
    span = loc_join(l.span, r.span)
    p[0] = syntax.BinaryExpr('IMPLIES', l, r, span=span)
コード例 #9
0
def p_expr_eq(p: Any) -> None:
    'expr : expr EQUAL expr'
    l: syntax.Expr = p[1]
    r: syntax.Expr = p[3]
    span = loc_join(l.span, r.span)
    p[0] = syntax.BinaryExpr('EQUAL', l, r, span=span)
コード例 #10
0
def p_expr_iff(p: Any) -> None:
    'expr : expr IFF expr'
    l: syntax.Expr = p[1]
    r: syntax.Expr = p[3]
    span = loc_join(l.span, r.span)
    p[0] = syntax.BinaryExpr('IFF', l, r, span=span)
コード例 #11
0
def p_expr_mult(p: Any) -> None:
    'expr : expr STAR expr'
    l: syntax.Expr = p[1]
    r: syntax.Expr = p[3]
    span = loc_join(l.span, r.span)
    p[0] = syntax.BinaryExpr('MULT', l, r, span=span)
コード例 #12
0
def p_expr_sub(p: Any) -> None:
    'expr : expr SUB expr'
    l: syntax.Expr = p[1]
    r: syntax.Expr = p[3]
    span = loc_join(l.span, r.span)
    p[0] = syntax.BinaryExpr('SUB', l, r, span=span)
コード例 #13
0
def p_expr_plus(p: Any) -> None:
    'expr : expr PLUS expr'
    l: syntax.Expr = p[1]
    r: syntax.Expr = p[3]
    span = loc_join(l.span, r.span)
    p[0] = syntax.BinaryExpr('PLUS', l, r, span=span)
コード例 #14
0
def p_expr_le(p: Any) -> None:
    'expr : expr LE expr'
    l: syntax.Expr = p[1]
    r: syntax.Expr = p[3]
    span = loc_join(l.span, r.span)
    p[0] = syntax.BinaryExpr('LE', l, r, span=span)