有没有比生成Rust程序的预处理器更好的方法来实现约束满足求解器?

时间:2017-06-18 21:34:46

标签: rust self-modifying constraint-satisfaction

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

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

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

目前解决方案:

  1. Vec
  2. 中读取该函数的下一条指令
  3. 模式将该指令与操作匹配。
  4. 执行该指令并保存结果,以便稍后在函数中使用。
  5. 相反,我想预先处理函数并将它们转换为静态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. 运行新编译的解算器。
    6. 有更好的方法吗?

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

0 个答案:

没有答案