0

我在尝试将 java 布尔表达式转换为 Z3 能够理解的格式时遇到了一些问题。由于项目的某些要求,我不能使用任何其他工具来评估表达式。表达式中只能使用标识符,不能使用函数或更复杂的类型。

我考虑过的可能性是:

  • 使用 parboiled 或类似工具构建解析器。这样做的缺点是,我只想在将运算符转换为等效的 SMT 之后移动运算符所在的位置,并且可能添加括号,所以这个解决方案和涉及 AST 处理的工作对我来说似乎工作过度。此外,我发现定义一个适合所有嵌套级别的语法有点复杂。

  • 使用词法分析器或其他类型的工具获取标记,然后使用类似于Shunting-yard 算法的算法对它们重新排序。在这种情况下,也许应该要求输入包含所有括号以避免一些问题。

  • 使用可以解析表达式并对其进行编辑的库。到目前为止,除了可以让您评估表达式的工具之外,我还没有找到任何东西。

  • 使用可以直接在符号之间转换的东西。我一直在寻找,但我找不到。不过,这会让我很开心。

我已经查找了类似的问题,但我没有找到任何东西。我会很感激你有任何想法。提前致谢!

4

2 回答 2

1

你考虑过TXL吗?TXL 支持解析文件、将转换应用于抽象语法树并打印结果。它易于使用,并且拥有大量文档和大型语法(包括 Java)。

于 2013-11-15T17:03:08.507 回答
1

您可以使用免费软件工具bc2ncf将您的布尔表达式转换为CNF(连接范式)而不是 SMT。Z3能够输入CNF并解决包含的可满足性问题。

的命令行语法Z3往往会不时改变。前段时间,我使用了类似以下的东西:

bc2cnf.exe -v test.bc.txt test.dimacs.txt

z3.exe /dimacs /v:1 test.dimacs.txt > test.solution.txt
于 2013-11-15T19:23:23.637 回答