西西河

主题:【原创】语言编译器等请教 -- 中国农民

共:💬62 🌺30
全看分页树展 · 主题 跟帖
家园 怎么鸡生蛋蛋生鸡的

起初只有机器语言,机器语言当然不需要编译器。后来有了汇编语言,汇编转化为机器语言只是一个一对一(或一对二三)的简单对应,第一个汇编编译器自然可以不困难地用机器码一行一行地堆起来。事实上,我们甚至只需要实现一小部分机器码,以足够实现字符的读取与转换就可以了。现在我们有了原始汇编编译器,所有的后续开发(如理解所有机器代码的汇编编译器,再如Debugger等编译工具)就可以用已实现的汇编实现。好了我们现在有了完整的汇编编译器,那么今后的高级语言的实现就可以基于汇编编程。现在我们来试着造一个C语言编译器。我们知道这不容易。那么我们先造个简单的,先实现IF...THEN, GOTO, +/-,=。哈一天考定,不就六个TOKEN吗。别急!这是C语言吗。那那FOR,WHILE,乘除,函数,指针,等等呢?不错,这不是完整的C,可是用它们所有的程序都能实现。我们实际创造了一个C的自洽的最小子集的编辑器。下一步我们进一步释放我们的野心,我们用这六个TOKEN的语言实现更多功能的编译器。如果我们步子迈得大,我们可一步实现整个C语言,可我建议你多分几步,因为每一步新实现的功能的运用可以大大简化下一步的实现。我不知道C的发明者用了几步,但是三步看来应当是不错的选择。注意,即使所有的功能都实现了,它还不是一个最终的编译器,因为他没有考虑到效率(编译器本身的运行效率,还有编译出代码的效率)。但可喜的是,从此我们可以用C语言编写我们高效的产生代码的C编辑器。一但这个高级的编译器写好,并用前一个编辑器产生了可执行程序后,我们再用它编译它的C源代码,我们又可以得到自身运行效率高的C编译器可执行文件。

说到这里,鸡生蛋蛋生鸡的过程就告一段落了。与生物界的过程相似,虽然鸡生了蛋然后蛋又生了鸡,可是每一步的蛋和鸡都比上一步有改进,在生物学里那叫“进化”,在这里计算机科学家们叫“自拔靴”(bootstrap)方法。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河