如果您用纯 Prolog 编写编译器,它是否也可以用作反编译器?

If you write a compiler in pure Prolog, will it work as a decompiler also?

如果你写个compiler in (no extra-logical bits), will it work as a decompiler也行?

(我看的一本书上是这么说的,不知道有没有人试过)

这个问题需要更加精确,因为我们不知道什么是“编译器”(从图(语言 1 中的程序)到另一个图(算法上的程序)的无关信息转储转换我想是语言 2 中的等效图)。它也不清楚“没有额外的逻辑位意味着什么”。如果你摆脱了这些,你还能构建什么样的编译器?

这样看来,编译看起来像是纯粹的演绎(Prolog 运行 forward,或 CHR),而反编译看起来可能是非常困难的搜索(你会在无数可能的程序中得到一个程序,但它不会看起来也很愉快,并且与您之前的那个完全不同)。刚入脑的定理工具箱的人肯定能说的更多

但我会自动地说,不。其一,不能保证“反编译”时不会出现无限“向左递归”循环。

我曾经写过相当于 cdecl.org 的可逆程序。这有点棘手,但我证明了这是可以做到的。 (一堆文件中的某处是源代码;这些天,我希望将其发布在 github 上。)与使用 yacc/lex (bison/flex).

对于像 cdecl 这样的东西——你在 char ** const * const xdeclare x as const pointer to const pointer to pointer to char 之间进行翻译,compiling/decompiling 是有意义的。但是,从任意机器代码转换为源代码意味着什么?甚至在一些 IR 和源代码之间进行转换似乎也没有多大意义。