编译原理 编译原理知识点

高级语言为什么不直接编译成机器码,而编译成汇编代码

(2010-10-04 12:08:19)转载

标签: 杂谈

1.一般的编译器,是先将高级语言转换成汇编语言(中间代码),然后在汇编的基础上优化生成OBJ目标代码,最后Link成可执行文件。2.Que:高级语言为什么不直接编译成机器码,而编译成汇编代码?

ACK:1)其中有一个好处是方便优化,因为,编译器也是工具,也是机器,毕竟是机器生成的程序,不可以非常 完美的,而汇编是机器指令的助记符,一个汇编指令就对应一条机器指令(特殊指令除外)调试起来肯定会比 机器指令方便的方便,这样优化起来也方便。

2)高级语言只需要编译成汇编代码就可以了,汇编代码到机器码的转换是由硬件实现即可,有必要用软件实 现这样分层可以有效地减弱编译器编写的复杂性,提高了效率.就像网络通讯的实现需要分成很多层一样,主要 目的就是为了从人脑可分析的粒度来减弱复杂性.

3)如果把高级语言的源代码直接编译成机器码的话,那要做高级语言到机器码之间的映射,如果这样做的 话,每个写编译器的都必须熟练机器码。这个不是在做重复劳动么。

汇编语言编译器的编写方法

http://blog.chinaunix.net/u3/108571/

编译器自举!搜索这个关键字

程序都是编译器编译的。这个是肯定的

至于第一款X语言编译器是不是直接1010101010自己写的那就不知道啦

一般开发编译器的话。有两条路选择

1.利用yacc(或者其变种)&lex(词法分析)-等工具自己生成语法模板

词法语法都可以使用这些工具自己生成

然后自己编写生成的中间码和生成的机器码就可以了

一般做编译原理类似试验都是如此的。许多编译器也的确是这样

2.自己写词法分析和语法分析。可以参考一些开源的编译器

lcc-这个是ANSI C99标准的编译器是开源的

或者nasm,watcom等编译器到www.sf.net上不少开源的编译器

总的来说。高级语言编译器比较难写

如果想快速写出一个的话

可以采用第一种做法。利用工具生成语法词法模板

先写一个简单的汇编编译器比较简单

开源的有nasm,jwasm(支持masm语法开源的编译器)

http://www.japheth.de/JWasm.html

fasm(这款编译器是自举的.就是自己可以编译自己),

http://flatassembler.net/

剩下的就是自己做好语言规则关键字map

引用高手的话。语言map做好了你的编译器也做好一半了

剩下的都是机械性的工作了。

生成x86或者arm指令。

优化工作这个很难解释.根据你所需要的做吧

毕竟可以做出一个无错,又XX的编译器已经很难得

你可以选择使用现有的编译器开发自己的编译器

然后等到你的编译器支持相当数量指令和成熟度的时候

使用自己的语法重新写一遍编译器.

这样你就可以用自己的编译器开发自己的编译器了(是不是很邪恶?)

另外举几个例子

Delphi的编译器是C++ Builder开发的。

而C++ Builder的IDE是Delphi开发的
编译原理 编译原理知识点

C++ Builder的编译器是C++ Builder开发的-这个就是编译器自举了。。Delphi和C++ Builder共享一个后端化优化器。

Delphi 早期的版本的编译器是tasm直接编译的。可见Anders的汇编功力多强悍(Anders也就是后来VJ++,C#,.NET工程的核心架构师.最关键的灵魂级人物)

VC++的编译器是VC++开发的。很明显这都说明了编译器自举

自己开发自己。如果一个编译器可以做到自己编译自己。那基本上就可以实现任何功能了。

关于编译器开发的书籍可以看一下

龙书《编译原理(第二版)》

虎书《现代编译原理-C语言描述》

鲸书《高级编译器设计与实现》

建议从鲸书看起。然后是龙书

再来是虎书--虎书里面描述了许多现代编译器(正如其名)技术

例如面向对象啦,优化,垃圾回收等等.

鲸书看完基本上就可以实现一个简单的Tiny C编译器了

然后在龙书巩固,读一下语言规范,自己看一些开源的汇编编译器代码

自己就可以尝试做一个汇编语言编译器了.等到技术提高了

在尝试做一些高级语法识别,参考LCC代码做一下ANSI C99的

C语言编译器。再来就看你自己的兴趣和领悟度拉

如果想支持C++的话就得要对编译器做许多方便的研究

类似Java那种跨平台或者Ruby,Python等动态语言

虎书中也有描述。当然看自己功力了

原文地址 http://zhidao.baidu.com/question/142124109.html?push=ql

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/77502.html

更多阅读

暖气片工作原理 暖气片原理结构图

暖气片工作原理——简介暖气通常有水暖和气暖两种,一般暖气片指水暖,就是利用壁挂炉或者锅炉加热循环水,再通过管材链接到暖气片,最终通过暖气片将适宜的温度输出,形成室内温差,最后进行热循环使整个室内温度均匀上升。而气暖则是加热空气

小天鹅干洗机的工作原理解说 干洗机的原理

我们把采用四氯乙烯作为洗涤溶剂的干洗设备称为四氯乙烯干洗机,对采用石油作为溶剂的干洗设备称为石油干洗机;环保型干洗机是指在运行全过程中符合环保要求,对环境的危害没有或低于国家标准要求。小天鹅干洗机根据以下可能对环境和人

示波器的原理与使用全攻略 示波器原理与使用

? ?在数字电路实验中,需要使用若干仪器、仪表观察实验现象和结果。常用的电子测量仪器有万用表、逻辑笔、普通示波器、存储示波器、逻辑分析仪等。万用表和逻辑笔使用方法比较简单,而逻辑分析仪和存储示波器目前在数字电路教学实验中

如何做降落伞降落伞原理 降落伞的原理

如何做降落伞(降落伞原理)——简介降落伞起源于中国.降落伞是利用空气阻力,使人或物从空中缓慢向下降落的一种器具.它是从杂技表演开始发展起来的,随着人类航空事业的发展,后来用作空中救生,进而用于空降作战.如何做降落伞(降落伞原理)——工

声明:《编译原理 编译原理知识点》为网友撕裂你的心分享!如侵犯到您的合法权益请联系我们删除