我正在编写一个约束满足求解器,它将读取具有多种功能的输入文件,例如
and(not_equal(X0,X1),not_equal(absolute(subtract(X2,X3)),X4))
X1, X2, X3, X4, X5
求解器将尝试上述函数的 100 到 100,000,000 次组合。
目前求解器:
- 从 a 中读取函数的下一条指令
Vec
。 - 模式将该指令与操作相匹配。
- 执行指令并保存结果以供以后在函数中使用。
相反,我想对函数进行预处理并将它们转换为静态 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}
}
我计划有一个预处理程序:
- 读取输入文件。
- 自动生成一个将所有函数转换为 Rust 的模块。
- 编辑求解器的一个模块,使其使用新生成的函数。
- 调用编译器。
- 运行新编译的求解器。
有一个更好的方法吗?
我可以编写一个程序来编辑自己、调用自己的编译器并安排自己在编译完成后运行,而不是编写两个程序吗?