static expr_ref parse_fml(ast_manager& m, char const* str) {
    expr_ref result(m);
    front_end_params fp;
    cmd_context ctx(&fp, false, &m);
    ctx.set_ignore_check(true);
    std::ostringstream buffer;
    buffer << "(declare-const x Int)\n"
           << "(declare-const y Int)\n"
           << "(declare-const z Int)\n"
           << "(declare-const a Int)\n"
           << "(declare-const b Int)\n"
           << "(declare-const P Bool)\n"
           << "(declare-const Q Bool)\n"
           << "(declare-const r1 Real)\n"
           << "(declare-const r2 Real)\n"
           << "(declare-datatypes () ((IList (nil) (cons (car Int) (cdr IList)))))\n"
           << "(declare-const l1 IList)\n"
           << "(declare-const l2 IList)\n"
           << "(declare-datatypes () ((Cell (null) (cell (car Cell) (cdr Cell)))))\n"
           << "(declare-const c1 Cell)\n"
           << "(declare-const c2 Cell)\n"
           << "(declare-const c3 Cell)\n"
           << "(declare-datatypes () ((Tuple (tuple (first Int) (second Bool) (third Real)))))\n"
           << "(declare-const t1 Tuple)\n"
           << "(declare-const t2 Tuple)\n"
           << "(declare-const t3 Tuple)\n"
           << "(assert " << str << ")\n";
    std::istringstream is(buffer.str());
    VERIFY(parse_smt2_commands(ctx, is));
    SASSERT(ctx.begin_assertions() != ctx.end_assertions());
    result = *ctx.begin_assertions();
    return result;
}
 Z3_ast parse_smtlib2_stream(bool exec, Z3_context c, std::istream& is,
                             unsigned num_sorts,
                             Z3_symbol const sort_names[],
                             Z3_sort const sorts[],
                             unsigned num_decls,
                             Z3_symbol const decl_names[],
                             Z3_func_decl const decls[]) {
     Z3_TRY;
     cmd_context ctx(&mk_c(c)->fparams(), false, &(mk_c(c)->m()));
     ctx.set_ignore_check(true);
     if (exec) {
         ctx.set_solver(alloc(z3_context_solver, *mk_c(c)));
     }
     for (unsigned i = 0; i < num_decls; ++i) {
        ctx.insert(to_symbol(decl_names[i]), to_func_decl(decls[i]));
     }
     for (unsigned i = 0; i < num_sorts; ++i) {
         psort* ps = ctx.pm().mk_psort_cnst(to_sort(sorts[i]));
         ctx.insert(ctx.pm().mk_psort_user_decl(0, to_symbol(sort_names[i]), ps));
     }
     if (!parse_smt2_commands(ctx, is)) {
         SET_ERROR_CODE(Z3_PARSER_ERROR);
         return of_ast(mk_c(c)->m().mk_true());
     }
     ptr_vector<expr>::const_iterator it  = ctx.begin_assertions();
     ptr_vector<expr>::const_iterator end = ctx.end_assertions();
     unsigned size = static_cast<unsigned>(end - it);
     return of_ast(mk_c(c)->mk_and(size, it));
     Z3_CATCH_RETURN(0);
 }
예제 #3
0
    Z3_ast_vector Z3_fixedpoint_from_stream(
        Z3_context    c,
        Z3_fixedpoint d,
        std::istream& s) {
        ast_manager& m = mk_c(c)->m();
        dl_collected_cmds coll(m);
        cmd_context ctx(false, &m);
        install_dl_collect_cmds(coll, ctx);
        ctx.set_ignore_check(true);
        if (!parse_smt2_commands(ctx, s)) {
            SET_ERROR_CODE(Z3_PARSER_ERROR);
            return 0;
        }

        Z3_ast_vector_ref* v = alloc(Z3_ast_vector_ref, m);
        mk_c(c)->save_object(v);
        for (unsigned i = 0; i < coll.m_queries.size(); ++i) {
            v->m_ast_vector.push_back(coll.m_queries[i].get());
        }
        for (unsigned i = 0; i < coll.m_rels.size(); ++i) {
            to_fixedpoint_ref(d)->ctx().register_predicate(coll.m_rels[i].get(), true);
        }
        for (unsigned i = 0; i < coll.m_rules.size(); ++i) {
            to_fixedpoint_ref(d)->add_rule(coll.m_rules[i].get(), coll.m_names[i]);
        }
        ptr_vector<expr>::const_iterator it  = ctx.begin_assertions();
        ptr_vector<expr>::const_iterator end = ctx.end_assertions();
        for (; it != end; ++it) {
            to_fixedpoint_ref(d)->ctx().assert_expr(*it);
        }

        return of_ast_vector(v);
    }
예제 #4
0
unsigned read_smtlib2_commands(char const * file_name) {
    g_start_time = clock();
    register_on_timeout_proc(on_timeout);
    signal(SIGINT, on_ctrl_c);
    cmd_context ctx;

    ctx.set_solver_factory(mk_smt_strategic_solver_factory());
    ctx.set_interpolating_solver_factory(mk_smt_solver_factory());

    install_dl_cmds(ctx);
    install_dbg_cmds(ctx);
    install_polynomial_cmds(ctx);
    install_subpaving_cmds(ctx);
    install_opt_cmds(ctx);

    g_cmd_context = &ctx;
    signal(SIGINT, on_ctrl_c);
    
    bool result = true;
    if (file_name) {
        std::ifstream in(file_name);
        if (in.bad() || in.fail()) {
            std::cerr << "(error \"failed to open file '" << file_name << "'\")" << std::endl;
            exit(ERR_OPEN_FILE);
        }
        result = parse_smt2_commands(ctx, in);
    }
    else {
        result = parse_smt2_commands(ctx, std::cin, true);
    }
    

    #pragma omp critical (g_display_stats) 
    {
        display_statistics();
        g_cmd_context = 0;
    }
    return result ? 0 : 1;
}
예제 #5
0
static expr_ref parse_fml(ast_manager& m, char const* str) {
    expr_ref result(m);
    cmd_context ctx(false, &m);
    ctx.set_ignore_check(true);
    std::ostringstream buffer;
    buffer << "(declare-const x Real)\n"
           << "(declare-const y Real)\n"
           << "(declare-const z Real)\n"
           << "(declare-const a Real)\n"
           << "(declare-const b Real)\n"
           << "(assert " << str << ")\n";
    std::istringstream is(buffer.str());
    VERIFY(parse_smt2_commands(ctx, is));
    ENSURE(!ctx.assertions().empty());
    result = ctx.assertions().get(0);
    return result;
}
예제 #6
0
 Z3_ast parse_smtlib2_stream(bool exec, Z3_context c, std::istream& is,
                             unsigned num_sorts,
                             Z3_symbol const sort_names[],
                             Z3_sort const sorts[],
                             unsigned num_decls,
                             Z3_symbol const decl_names[],
                             Z3_func_decl const decls[]) {
     Z3_TRY;
     scoped_ptr<cmd_context> ctx = alloc(cmd_context, false, &(mk_c(c)->m()));
     ctx->set_ignore_check(true);
     for (unsigned i = 0; i < num_decls; ++i) {
         ctx->insert(to_symbol(decl_names[i]), to_func_decl(decls[i]));
     }
     for (unsigned i = 0; i < num_sorts; ++i) {
         sort* srt = to_sort(sorts[i]);
         symbol name(to_symbol(sort_names[i]));
         if (!ctx->find_psort_decl(name)) {
             psort* ps = ctx->pm().mk_psort_cnst(srt);
             ctx->insert(ctx->pm().mk_psort_user_decl(0, name, ps));
         }
     }
     std::stringstream errstrm;
     ctx->set_regular_stream(errstrm);
     try {
         if (!parse_smt2_commands(*ctx.get(), is)) {
             ctx = nullptr;
             mk_c(c)->m_parser_error_buffer = errstrm.str();
             SET_ERROR_CODE(Z3_PARSER_ERROR);
             return of_ast(mk_c(c)->m().mk_true());
         }
     }
     catch (z3_exception& e) {
         errstrm << e.msg();
         mk_c(c)->m_parser_error_buffer = errstrm.str();            
         ctx = nullptr;
         SET_ERROR_CODE(Z3_PARSER_ERROR);
         return of_ast(mk_c(c)->m().mk_true());
     }
     ptr_vector<expr>::const_iterator it  = ctx->begin_assertions();
     ptr_vector<expr>::const_iterator end = ctx->end_assertions();
     unsigned size = static_cast<unsigned>(end - it);
     return of_ast(mk_c(c)->mk_and(size, it));
     Z3_CATCH_RETURN(0);
 }
예제 #7
0
파일: api_solver.cpp 프로젝트: levnach/z3
    void solver_from_stream(Z3_context c, Z3_solver s, std::istream& is) {
        scoped_ptr<cmd_context> ctx = alloc(cmd_context, false, &(mk_c(c)->m()));
        ctx->set_ignore_check(true);
        std::stringstream errstrm;
        ctx->set_regular_stream(errstrm);

        if (!parse_smt2_commands(*ctx.get(), is)) {
            ctx = nullptr;
            SET_ERROR_CODE(Z3_PARSER_ERROR, errstrm.str().c_str());
            return;
        }

        bool initialized = to_solver(s)->m_solver.get() != nullptr;
        if (!initialized)
            init_solver(c, s);
        for (expr * e : ctx->assertions()) {
            to_solver_ref(s)->assert_expr(e);
        }
        to_solver_ref(s)->set_model_converter(ctx->get_model_converter());
    }
예제 #8
0
파일: qe_arith.cpp 프로젝트: bachdylan/z3
static expr_ref parse_fml(ast_manager& m, char const* str) {
    expr_ref result(m);
    cmd_context ctx(false, &m);
    ctx.set_ignore_check(true);
    std::ostringstream buffer;
    buffer << "(declare-const x Real)\n"
           << "(declare-const y Real)\n"
           << "(declare-const z Real)\n"
           << "(declare-const u Real)\n"
           << "(declare-const v Real)\n"
           << "(declare-const t Real)\n"
           << "(declare-const a Real)\n"
           << "(declare-const b Real)\n"
           << "(assert " << str << ")\n";
    std::istringstream is(buffer.str());
    VERIFY(parse_smt2_commands(ctx, is));
    SASSERT(ctx.begin_assertions() != ctx.end_assertions());
    result = *ctx.begin_assertions();
    return result;
}