我使用ParseSMTLIB2File来解析smt2文件Context.smt2,该文件具有数据类型,常量和函数的声明; e.g。
; Sort Declarations
(declare-sort tla_sort_Str)
(declare-const x tla_sort_Str)
(declare-const y tla_sort_Str)
(declare-const z tla_sort_Str)
然后,我使用ParseSMTLIB2String来解析字符串"(assert(= x y))"。以下是我的代码:
BoolExpr expr = ctx.parseSMTLIB2File("Context.smt2", null, null, null, null);
String str = "(assert (= x y))";
BoolExpr assert = ctx.parseSMTLIB2String(str, null, null, null, null);
不幸的是,我收到了一个错误。我想原因是ctx不知道tla_sort_Str,x和y是什么。如果不是,我如何将Context.smt2中的信息传递给parseSMTLIB2String?非常感谢你。
答案 0 :(得分:1)
那是什么' null'参数是(其中一个是提供之前构建的排序)。
然而,parseSMTLIB2File并非不支持SMT2或任何扩展的所有功能。它基本上会读取断言并忽略其他所有内容,可能包括排序声明。 SMT2是一种交互语言,但是在parseSMTLIB2File的范围内没有交互,因此不会执行任何命令,例如,最重要的示例是User
+----+-------+
| Id | Email |
+----+-------+
| 1 | a@b.c |
| 2 | b@c.d |
| 3 | c@d.e |
+----+-------+
Attributes
+----+-----------+
| Id | Attribute |
+----+-----------+
| 1 | name |
| 2 | gender |
| 3 | age |
+----+-----------+
UserAttributes
+--------+--------+--------+
| UserId | AttrID | Value |
+--------+--------+--------+
| 1 | 1 | Foo |
| 1 | 2 | Male |
| 1 | 3 | 21 |
| 2 | 1 | Bar |
| 2 | 2 | Female |
| 3 | 1 | FooBar |
| 3 | 2 | Male |
| 3 | 3 | 25 |
+--------+--------+--------+
命令,其未被执行。