【发布时间】:2015-03-13 23:35:15
【问题描述】:
可以对代码进行反编译的典型方法是什么?目前,我正在编写一种简单的编程语言,它的处理方式是递归的。循环遍历一个节点列表,并且说当前节点是一个变量节点,它会调用一个emit_variable_node 函数,它会在字面上附加一些代码到一个字符串,例如:
以下代码是伪代码,我正在用 C 编写我的项目,并编译为 C。
char *file_contents;
void emit_variable_node(VariableNode *var) {
// I know += doesn't work on strings, just pretend it does.
file_contents += var.getType();
file_contents += " "; // a space
file_contents += var.getName();
// etc
}
我还假设我们给出的代码已经过语义分析,并且是正确的。然后将 file_contents 字符串存储到一个临时文件中,该文件在被 C 编译器编译后被删除。
这是一种不好的做法,还是有更好、更清洁的方法来做到这一点?
【问题讨论】:
-
对我来说似乎很好。试一试,看看完成后的效果:) 根据转换的复杂性,您可能会发现某种模板库很有用。
-
啊,已经部分实现了!我只是想在进一步研究它之前检查它是否是一个好的实现:)
-
嗯,遗憾的是,我以前从未做过这样的事情,但对于字符串解析,我会使用 perl 或 python 之类的语言......但如果 C++ 有效,为什么不呢。有一些工具可能会有所帮助,例如 Bison、Flex 或 LLVM
-
@feliks:由于 C 缺乏方便的字符串处理函数,而且我习惯使用 printf 格式,我倾向于使用自己编写的一个小库。恕我直言,其中大部分是
concatf,如果需要,您可以从this little bison example 中提取。 -
相关链接:en.wikipedia.org/wiki/Source-to-source_compiler(对于那些不确定“转编译”是什么意思的人)。