您的位置:首页 > 其它

浅谈编译器和解释器

2014-03-17 01:45 295 查看
作为程序开发人员,经常会听到说这种语言是编译型语言,哪种是解释性语言,是不是会搞糊涂,在这里笔者浅谈一下编译器和解释器的认识。首先想谈一些编译器和解释器,如果学过编译原理的朋友都知道,这两者的区别,现在帮读者一起回忆一下。

一、编译器

简单说,就是把源程序翻译成机器语言,源程序一般是高级语言,比如现在主流开发语言CC++C#Java
机器语言就是机器可以直接读的,一般来说不同的机器语言不同。编译器的主要结构如下:



通过上图可以看到: 整个编译过程主要分为五步骤,如果细分的话,会包括词法分析,语法分析,语义分析等等,下面引用一直以前网友的图片:



这样就可以全面看到了整个编译器的执行过程。现在编译C语言的,gcc 或者javac都属于编译器。

二、解释器

解释器又名直译器, 是一种能够把高级编程语言逐行转译,它不会先一次性把整个程序转译过来。因此执行过程比较慢。像目前流行的python和ruby都是解释性语言。

再引用一张大牛的图片,和大家分享。



由于解释器逐行解释太慢,所以对其进行不断的优化,现在解释器运行程序的方法主要有以下三种:

1.直接运行高级编程语言 (如 Shell 自带的解释器)

2.转换高级编程语言码到一些有效率的字节码 (Bytecode),并运行这些字节码

3.以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序 (例如:JIT)

可以看到第二种方法,解释器会先把高级语言转为字节码,然后再运行。这样效率就有了很大提高。现在python就是用用这种方法。

刚刚学习,有不对之处,请大家指出。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: