def returnstmt(s): outparams = da.Tuple(*[da.App(p) for p in method_context.outparams]) values = da.Tuple(*s.args) opa = da.AssignStmt(outparams,values) opa.lineno = s.lineno res = opa.to_ivy() scope_context.returns = True return res
def p_stmt_var_assign_expr_semi(p): 'stmt : VAR symbols ASSIGN exprs SEMI' p[0] = da.VarStmt(da.AssignStmt(da.Tuple(*[da.App(x) for x in p[2]]),da.Tuple(*p[4]))) p[0].lineno = p.lineno(1);
def p_stmt_while_expr_modifies_invariant_lcb_stmts_rcb(p): 'stmt : WHILE expr modifies invariants LCB stmts RCB' p[0] = da.WhileStmt(p[2],p[3],da.App(da.And(),*p[4]),p[6]) p[0].lineno = p.lineno(1)
def p_lvalue_symbol(p): 'lvalue : symbol' p[0] = da.App(p[1])
def p_expr_expr_GT_expr(p): 'expr : expr GT expr' p[0] = da.App(da.InfixRelation(p[2]),p[1],p[3]) p[0].lineno = p.lineno(2)
def p_expr_expr_TIMES_expr(p): 'expr : expr TIMES expr' p[0] = da.App(da.InfixSymbol(p[2]),p[1],p[3]) p[0].lineno = p.lineno(2)
def p_expr_MINUS_expr(p): 'expr : MINUS expr' p[0] = da.App(da.Symbol(p[1]),p[2]) p[0].lineno = p.lineno(2)
def p_expr_expr_bangeq_expr(p): 'expr : expr BANGEQ expr' p[0] = da.App(da.Not(),da.App(da.Eq(),p[1],p[3]))
def p_expr_expr_eqeq_expr(p): 'expr : expr EQEQ expr' p[0] = da.App(da.Eq(),p[1],p[3])
def p_expr_expr_not_expr(p): 'expr : BANG expr' p[0] = da.App(da.Not(),p[2])
def p_expr_expr_iff_expr(p): 'expr : expr IFF expr' p[0] = da.App(da.Iff(),p[1],p[3])
def p_expr_expr_implies_expr(p): 'expr : expr IMPLIES expr' p[0] = da.App(da.Implies(),p[1],p[3])
def p_expr_expr_or_expr(p): 'expr : expr OR expr' p[0] = da.App(da.Or(),p[1],p[3])
def p_expr_expr_and_expr(p): 'expr : expr AND expr' p[0] = da.App(da.And(),p[1],p[3])
def p_expr_symbol(p): 'expr : symbol' p[0] = da.App(p[1])
def subst_symbols_app(s,m): return da.App(s.symbol.subst_symbols(m), *[subst_symbols_list(a,m) for a in s.args])