西西河

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

共:💬62 🌺30 新:
全看分页树展 · 主题 跟帖
家园 不好意思最近比较忙,没有下河

简单的说,C的编译器也可以是用C来写的啊。当然了,第一个C的编译器(最最最最。。。。最原始的一个当然是用汇编来搞了,原因呢?很简单,还没有东西可以编译C的程序啊)有了第一个C的编译器之后,就没有必要(注意,是没有必要,而不是不能)再继续完全使用汇编了。

这个过程就有点儿想工业革命似的--工业革命之前,人类要手工制作机器;工业革命之后,人类可以用机器自动制造机器。没有原始的C编译器之前,汇编语言和机器语言是程序员仅有的选择。当第一个C的编译器出来之后,程序员就可以写C程序了,就可以用C语言来写编译器了。再后来,更高级的语言出来了,就像小孩子搭积木一样,程序员可以用最基本的东西搭出非常复杂的东西;比如说用C来写一个C++的编译器。

国内中科大有一个教材《编译原理》就是介绍编译器的基本原理和理论基础的。我们学这门课的时候的课程项目就是如何实现一个类PL/1(一种很想Pascal)语言的编译器和执行器。

再多嘴说两句,编译其实就是一个翻译的过程,比如说:a = 0; a = a +1; 翻译成汇编大概就是这个样子:byte a;set a 0; add a 1;(伪的不能再伪的伪汇编)。编译器的职责就是读一个高级语言程序的文本,然后将它翻译成相应的汇编或机器代码。想通了这一点,剩下的就是需要一些编译原理里面如何做词法分析,语法分析之类的东西了。这些都是有标准算法的,看看相应的教材应该会有帮助:)

全看分页树展 · 主题 跟帖


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

Copyright © cchere 西西河