有没有比生成Rust程序的预处理器更好的方法来实现约束满足解算器?
我正在编写一个约束满足解算器,它将读取具有多个函数的输入文件,例如有没有比生成Rust程序的预处理器更好的方法来实现约束满足解算器?,rust,self-modifying,constraint-satisfaction,Rust,Self Modifying,Constraint Satisfaction,我正在编写一个约束满足解算器,它将读取具有多个函数的输入文件,例如 和(不等于(X0,X1),不等于(绝对(减去(X2,X3)),X4)) 求解器将在上述函数上尝试100到100000000秒的X1、X2、X3、X4、X5组合 当前,解算器: 从Vec读取函数的下一条指令 模式将该指令与操作相匹配 执行指令并保存结果,以便稍后在函数中使用 相反,我希望对函数进行预处理,并将它们转换为静态代码。因此,上述功能将变为: fn func_1 (vars: &Vec<i32>) -
和(不等于(X0,X1),不等于(绝对(减去(X2,X3)),X4))
求解器将在上述函数上尝试100到100000000秒的X1、X2、X3、X4、X5
组合
当前,解算器:
Vec
读取函数的下一条指令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}
}
fn func_1(变量:&Vec)->bool{
设t1=if-vars[0]!=vars[1]{1}else{0};
设t2=vars[2]-vars[3];
t2.abs();
设t3=if t2!=vars[4]{1}else{0};
如果t1==1&&t3==1{return true}否则{return false}
}
我计划有一个预处理器程序:
我可以编写一个单独的程序来编辑自己,在自己身上调用编译器,并安排自己在编译完成后运行吗?听起来像是在尝试编写编译器。:-)你认为将两个独立的程序塞进一个源文件会有什么好处?@Shepmaster认为,如果程序紧密耦合,文件管理会更容易。我还想确保我没有错过一个更简单的解决方案。你为什么要写这个而不是使用像Z3这样的SMT解决方案?你想做的事情很可能无法用SMT表达出来,但我会先看一看,然后再开始类似的项目。@KyleJones主要是为了好玩和体验。这实际上是我写的第二个解算器。我想修复我在第一个解算器中早期犯下的几个设计错误。听起来你好像在试图编写编译器。:-)你认为将两个独立的程序塞进一个源文件会有什么好处?@Shepmaster认为,如果程序紧密耦合,文件管理会更容易。我还想确保我没有错过一个更简单的解决方案。你为什么要写这个而不是使用像Z3这样的SMT解决方案?你想做的事情很可能无法用SMT表达出来,但我会先看一看,然后再开始类似的项目。@KyleJones主要是为了好玩和体验。这实际上是我写的第二个解算器。我想修复我在第一个解算器早期犯的几个设计错误。