Files
cvc5/examples/api/cpp/parser.cpp
Aina Niemetz 58d7c6d556 c++ api: Expose TermManager to the API. (#10426)
This introduces a TermManager object, which will, in the future, be the
sole object responsible for handling/managing terms and sorts. For now,
all corresponding functions in `cvc5::Solver` are marked as deprecated,
as is constructor `cvc5::Solver::Solver()`, since in the future a solver
instance must be constructed from a term manager instance. Currently, we
maintain a static thread_local term manager instance to not break the
API and continue providing constructor `cvc5::Solver::Solver()`.

Note that this already converts all C++ unit tests to use the
TermManager except for a single test `getStatistics()` in
`test/unit/api/cpp/solver_black.cpp`. Statistics handling is currently
still maintained on the solver level. The statistics we maintain,
however, concern terms only and will eventually be refactored to be
tracked in the NodeManager.

Further note that the Java and Python APIs will be refactored in
separate PRs.
2024-03-08 19:39:13 +00:00

69 lines
2.0 KiB
C++

/******************************************************************************
* Top contributors (to current version):
* Andrew Reynolds
*
* This file is part of the cvc5 project.
*
* Copyright (c) 2009-2022 by the authors listed in the file AUTHORS
* in the top-level source directory and their institutional affiliations.
* All rights reserved. See the file COPYING in the top-level source
* directory for licensing information.
* ****************************************************************************
*
* A simple demonstration of using the parser via C++ API.
*/
#include <cvc5/cvc5.h>
#include <cvc5/cvc5_parser.h>
#include <iostream>
using namespace cvc5;
using namespace cvc5::parser;
int main()
{
TermManager tm;
Solver slv(tm);
// set that we should print success after each successful command
slv.setOption("print-success", "true");
// construct an input parser associated the solver above
InputParser parser(&slv);
std::stringstream ss;
ss << "(set-logic QF_LIA)" << std::endl;
ss << "(declare-fun a () Int)" << std::endl;
ss << "(declare-fun b () Int)" << std::endl;
ss << "(declare-fun c () Int)" << std::endl;
ss << "(assert (> a (+ b c)))" << std::endl;
ss << "(assert (< a b))" << std::endl;
ss << "(assert (> c 0))" << std::endl;
parser.setStreamInput(modes::InputLanguage::SMT_LIB_2_6, ss, "MyStream");
// get the symbol manager of the parser, used when invoking commands below
SymbolManager* sm = parser.getSymbolManager();
// parse commands until finished
Command cmd;
while (true)
{
cmd = parser.nextCommand();
if (cmd.isNull())
{
break;
}
std::cout << "Executing command " << cmd << ":" << std::endl;
// invoke the command on the solver and the symbol manager, print the result
// to std::cout
cmd.invoke(&slv, sm, std::cout);
}
std::cout << "Finished parsing commands" << std::endl;
// now, check sat with the solver
Result r = slv.checkSat();
std::cout << "expected: unsat" << std::endl;
std::cout << "result: " << r << std::endl;
}