1

我正在编写一个约束满足求解器,它将读取具有多种功能的输入文件,例如

and(not_equal(X0,X1),not_equal(absolute(subtract(X2,X3)),X4))

X1, X2, X3, X4, X5求解器将尝试上述函数的 100 到 100,000,000 次组合。

目前求解器:

  1. 从 a 中读取函数的下一条指令Vec
  2. 模式将该指令与操作相匹配。
  3. 执行指令并保存结果以供以后在函数中使用。

相反,我想对函数进行预处理并将它们转换为静态 Rust 代码。所以上面的函数会变成:

fn func_1 (vars: &Vec<i32>) -> bool {
    let t1 = if vars[0] != vars[1] {1} else {0};
    let t2 = vars[2] - vars[3];
    t2.abs();
    let t3 = if t2 != vars[4] {1} else {0};
    if t1 == 1 && t3 == 1 {return true} else {return false}
}

我计划有一个预处理程序:

  1. 读取输入文件。
  2. 自动生成一个将所有函数转换为 Rust 的模块。
  3. 编辑求解器的一个模块,使其使用新生成的函数。
  4. 调用编译器。
  5. 运行新编译的求解器。

有一个更好的方法吗?

我可以编写一个程序来编辑自己、调用自己的编译器并安排自己在编译完成后运行,而不是编写两个程序吗?

4

0 回答 0