Как читать строки smtlib2 с помощью Z3 C++ API?

Я хочу создать объект expr из заданного файла SMTLIB2. Я вижу функцию Z3_parse_smtlib_string в примерах C. Есть ли для этого оболочка в классе expr?


z3
person Garvit Juniwal    schedule 24.09.2012    source источник


Ответы (1)


Z3 C++ API явно не предоставляет эту функциональность как часть класса expr. Однако C++ API можно использовать вместе с C API, т. е. для этого можно использовать функцию Z3_parse_smtlib_string (или ..._file). Обратите внимание, что эта функция возвращает объект Z3_ast, который необходимо преобразовать в объект expr, чтобы вернуться в «мир» C++.

Простой пример:

#include <z3++.h>

...

context ctx;
Z3_ast a = Z3_parse_smtlib2_file(ctx, "test.smt2", 0, 0, 0, 0, 0, 0);    
expr e(ctx, a);
std::cout << "Result = " << e << std::endl;

Поскольку функции Z3_parse_smtlib2_* не выполняют проверку ошибок, при ошибках не будет выдаваться исключение. Это может быть достигнуто с помощью вызовов context::check_error().

person Christoph Wintersteiger    schedule 25.09.2012
comment
Связанный вопрос: stackoverflow.com/questions/24523407 / - person d'alar'cop; 02.07.2014