主题:【原创】语言编译器等请教 -- 中国农民
起初只有机器语言,机器语言当然不需要编译器。后来有了汇编语言,汇编转化为机器语言只是一个一对一(或一对二三)的简单对应,第一个汇编编译器自然可以不困难地用机器码一行一行地堆起来。事实上,我们甚至只需要实现一小部分机器码,以足够实现字符的读取与转换就可以了。现在我们有了原始汇编编译器,所有的后续开发(如理解所有机器代码的汇编编译器,再如Debugger等编译工具)就可以用已实现的汇编实现。好了我们现在有了完整的汇编编译器,那么今后的高级语言的实现就可以基于汇编编程。现在我们来试着造一个C语言编译器。我们知道这不容易。那么我们先造个简单的,先实现IF...THEN, GOTO, +/-,=。哈一天考定,不就六个TOKEN吗。别急!这是C语言吗。那那FOR,WHILE,乘除,函数,指针,等等呢?不错,这不是完整的C,可是用它们所有的程序都能实现。我们实际创造了一个C的自洽的最小子集的编辑器。下一步我们进一步释放我们的野心,我们用这六个TOKEN的语言实现更多功能的编译器。如果我们步子迈得大,我们可一步实现整个C语言,可我建议你多分几步,因为每一步新实现的功能的运用可以大大简化下一步的实现。我不知道C的发明者用了几步,但是三步看来应当是不错的选择。注意,即使所有的功能都实现了,它还不是一个最终的编译器,因为他没有考虑到效率(编译器本身的运行效率,还有编译出代码的效率)。但可喜的是,从此我们可以用C语言编写我们高效的产生代码的C编辑器。一但这个高级的编译器写好,并用前一个编辑器产生了可执行程序后,我们再用它编译它的C源代码,我们又可以得到自身运行效率高的C编译器可执行文件。
说到这里,鸡生蛋蛋生鸡的过程就告一段落了。与生物界的过程相似,虽然鸡生了蛋然后蛋又生了鸡,可是每一步的蛋和鸡都比上一步有改进,在生物学里那叫“进化”,在这里计算机科学家们叫“自拔靴”(bootstrap)方法。
特别是FASM是一个免费的宏汇编语言,而且有原代码,可以作为参考.
我不是计算机专业的,我也有跟你一样的疑问.
当时的老师很不高兴,很不耐烦,好像这是个一加一等于二的问题一样,俺也不好意思再问下去了。很多年以后,俺知道这个问题的真正答案后才知道,有多少好苗子被中国的老师毁灭了:)
你的问题相当于问:俺没有任何软件甚至评估板之类,只有一本来自INTEL
的芯片手册和一片芯片,但是俺有高级的关于现代系统的一切知识,如何开始写软件甚至构造一个OS造出今天的计算机来?
这个过程是无限漫长的,但每一步并不困难。首先,俺可以根据INTEL的手册,只用HARDWARE搭出一个系统来。这个过程大和于大学里计算机原理课的LAB课内容差不多,就是在CPU周围给它搭上外围电路和eprom以及RAM,然后俺通过按各种开关写出第一个汇编器!!!一旦这个东东可以被保存在EPROM中,我们就生出了第一只鸡,剩下的就是鸡生蛋再蛋生鸡的过程了。
实际过程中,那些外围电路可能有软件,但不考虑效率的话,实际上都可以用硬件来代替。一切的软硬件都不过是关于某种时序和逻辑!这里的关键是你按过的开关的顺序一定要能被保存下来反复使用并实现同样的功能!没有这条任何软件系统都不可能成功。
问这个问题的同学都深刻地触及了冯洛伊曼计算机的本质。他们实际上在开始思考大师们七八十年前或百余年前(如果从巴贝奇算起的话)思考过并解决了的问题。可惜的是问这种问题的人在中国一般是遭到某种半通不通的工匠们的嘲笑!
国内大学有一代老师水平真是不怎么样。现在一些年轻30多,国外回来的老师水平还不错。再就是已经60-70多的一些,可能还要老的老师有水平,有风度。
类似于Zork,里头也要分析语义,老兄的帖子倒是给了我一点启发。
又想玩出点东西来,挺难。
我对计算机的一些东西也是半通不通,希望哪位河友能多提供一些知识...
像是从英文翻译来的。呵呵,是褒义的,个人觉得读起来生动的多
当然boot是bootstrap简略来的。统计学里bootstrap不是翻成自举的
在语言学里也有这个词,好像用于machine lerning的方法。
在统计里也有,是不是从大样本集合随机抽取n个小样本集,没学过,不是很清楚。
C++ How to Program, Fifth Edition
By H. M. Deitel - Deitel & Associates, Inc., P. J. Deitel - Deitel & Associates, Inc.
习题8-18, 8-19, 和 21-16。在第1043页上有一个Special Section: Building Your Own Compiler。
看一下也许对你会有所启发。