Api 使用Z3_parse_smtlib2_文件解析Z3中提供的示例文件时出现解析错误

Api 使用Z3_parse_smtlib2_文件解析Z3中提供的示例文件时出现解析错误,api,z3,parse-error,Api,Z3,Parse Error,我正在使用Z34.1,我想在我的程序中解析smt lib2格式的输入 因此,我首先尝试使用Z3_parse_smtlib2_file来解析Z3中提供的示例(位于文件夹Z3-4.1/examples/smtlib下)。但是我发现了很多解析错误,然后我的程序立即退出。我认为输入格式应该是正确的。我尝试使用以下代码解析Z3.2.smt2: (set-option :auto-config true) (set-option :produce-models true) (declare-const a

我正在使用Z34.1,我想在我的程序中解析smt lib2格式的输入

因此,我首先尝试使用
Z3_parse_smtlib2_file
来解析Z3中提供的示例(位于文件夹Z3-4.1/examples/smtlib下)。但是我发现了很多解析错误,然后我的程序立即退出。我认为输入格式应该是正确的。我尝试使用以下代码解析Z3.2.smt2:

(set-option :auto-config true)
(set-option :produce-models true)

(declare-const a Int)
(declare-fun f (Int Bool) Int)
(assert (> a 10))
(assert (< (f a true) 100))
(check-sat)
API的调用方式如下:

fs = Z3_parse_smtlib2_file(ctx, fname, 0, 0, 0, 0, 0, 0);

问题在哪里?输入文件应该是正常的。问题是否存在于Z3_parse_smtlib2_文件中的参数中?

如错误消息所示,一旦初始化Z3上下文,就无法修改自动配置选项。只有少数选项是可变的,可以在创建上下文后更改,而自动配置不在其中。 排队的时候

(set-option :auto-config true)

从正确解析的输入文件中删除。如果您的应用程序需要设置任何选项,最好直接将它们传递给上下文构造函数,即通过向其传递
config
(在C++中)或
Z3_-config
(在C中)对象。

如错误消息所示,一旦初始化Z3上下文,就无法修改自动配置选项。只有少数选项是可变的,可以在创建上下文后更改,而自动配置不在其中。 排队的时候

(set-option :auto-config true)

从正确解析的输入文件中删除。如果您的应用程序需要设置任何选项,最好直接将它们传递给上下文构造函数,即通过向其传递
config
(在C++中)或
Z3\u config
(在C中)对象。

Christoph,您是对的。当我删除行“(set option:auto-config-true)”时,解析器API运行良好。但我遇到了一个新问题。Z3_parse_smtlib2_文件在输入文件末尾添加新行“(get model)”时产生错误。错误消息是:smt2parser_示例(错误“第9行第10列:模型不可用”)错误代码:4错误:错误使用Z3。事实上,我也是这样。此处忽略:product models选项,在构建上下文时应设置该选项。通常,解析函数Z3_parse_smtlib*主要用于解析公式。SMT2脚本可以直接在命令行上执行,方法是将它们传递给Z3二进制文件。当我删除行“(set option:auto-config-true)”时,解析器API运行良好。但我遇到了一个新问题。Z3_parse_smtlib2_文件在输入文件末尾添加新行“(get model)”时产生错误。错误消息是:smt2parser_示例(错误“第9行第10列:模型不可用”)错误代码:4错误:错误使用Z3。事实上,我也是这样。此处忽略:product models选项,在构建上下文时应设置该选项。通常,解析函数Z3_parse_smtlib*主要用于解析公式。通过将SMT2脚本传递给Z3二进制文件,可以直接在命令行上执行SMT2脚本。