⑴ 请问编译程序和解释程序是什么意思什么是编译器、什么是解释器
编译和解释是从源程序到可执行程序转换的两种方法。编译,是在源程序完成后,先转换成中间代码,然后再转换成二进制代码,完成后,每次执行,都直接执行这个二进制代码。一次转换完成。
而解释程序的执行不同,他在执行时,是一次读入一条源代码,然后分析转换成二进制代码,执行这条语句,然后再读入一条源代码,再转换,再执行。是一边转换一边执行。编译器和解释器就是完成编译和解释工作的一个软件。
⑵ jdk中的编译器是什么,解释器是什么
编译器是指java程序运行时对java代码进行语法检查和代码规范的一种机制,若不符合代码规范和语法有错误编译器将会报错,代码将无法运行。解释器我很少听说,是不是编译器报错的时候出现的错误提示?
⑶ 计算机都有编译器和解释器吗
编译器是程序员开发程序用的~!
而解释器则是执行脚本程序用到~
编译器和解释器都是软件,非硬件``
而计算机上通常在系统中已装有某些脚本或批处理的解释器。
编译器大多数就没有内置安装了。
⑷ 编译器和解释器的主要区别是什么他们相对于对方各自的优点
解释器是解释执行的源代码,编译器是将源代码编译成目标代码
他们最大的区别是程序运行时需要解释器边解释边执行,而编译器则在运行时是完全不需要的
解释器的优点是比较容易让用户实现自己跨平台的代码,比如java,php等,同一套代码可以在几乎所有的操作系统上执行,而无需根据操作系统做修改;
编译器的目的就是生成目标代码再由连接器生成可执行的机器码,这样的话需要根据不同的操作系统编制代码,虽然有像Qt这样的源代码级跨平台的编程工具库,但在不同的平台上仍然需要重新编译连接成可执行文件,但其执行效率要远远高于解释运行的程序。
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
⑸ 超赞,编译器和解释器的异同,瞬间明白了
编译器和解释器的最大不同就是:以 WINDOWS 系统为例进行讲解就是:编译器是可以把用户编写的源程序(例如:C 语言源程序)经过编译、链接产生成一个在 WINDOWS 系统下面可独立运行的二进制代码(以 *.exe 为后缀的);而解释器则必须在高级语言的解释环境中才能够运行用户编写的源程序,一旦退出了解释器,那么用户编写的源程序将无法执行。例如:以前的 BASIC 语言就是解释执行、而不是编译执行的。即:在 BASIC 解释环境中,可以执行用户编写的以 *.BAS 为后缀的源程序,但是一旦退出了 BASIC 解释器,那么用户编写的 *.BAS 源程序就无法执行了。
⑹ python 编译器与解释器
编译器是整体编译再执行,而解释器是边解释便执行。
举个简单的例子,编译器就相当于你买了一桶海底捞,那么所有海底捞食材都是整体“编译”好,只要通过倒水(执行)就可以吃,而解释器相当于你去海底捞门店,然后菜是一道一道上(一条一条解释这是啥菜),你是一道一道放入汤中吃(执行)。
编译器 的特点是:
解释器 的特点是:
python的源文件通过解释器进行模块的加载及链接,然后将解释完成的字节码存入内存,提供给CPU进行操作,然后写入本地的.pyc文件,其触发条件是判断 是否存在.pyc文件+比较源文件与编译的.pyc文件的时间戳
⑺ java解释器和编译器分别是什么
Java的编译方式有两种,一种是和C++等语言一样的,把源代码编译成和本地机器平台相关的机器语言,叫即时编译。另一种是编译成一种中间的字节码,与机器平台无关的,这种也是常用的,叫解释型的。
即时编译器因为产生的是本地机器的机器码,能直接执行;不像字节码还要在JVM(Java虚拟机)上解释运行,所以执行得更快些。
请采纳!
⑻ python解释器
python解释器的介绍:
解释器由一个编译器和一个虚拟机构成,编译器负责将源代码转换成字节码文件,而虚拟机负责执行字节码。
所以,解释型语言其实也有编译过程,只不过这个编译过程并不是直接生成目标代码,而是中间代码(字节码),然后再通过虚拟机来逐行解释执行字节码。
计算机的大脑是CPU, 中文名叫中央处理器,它仍然不能直接处理 Python 语言。CPU 只能直接处理机器指令语言,那是一种由0和1数字组成的语言,这是一种我们人很难直接写出来的语言。
所以,我们需要一个翻译,把Python语言翻译成 计算机CPU 能听懂的机器指令语言,这样计算机才能按照 我们的Python程序的要求去做事。.py结尾的文件需要解释器去运行执行。
执行过程原理:
1.执行 python XX.py 后,将会启动 Python 的解释器。
2.python解释器的编译器会将.py源文件编译(解释)成字节码生成PyCodeObject字节码对象存放在内存中。
3.python解释器的虚拟机将执行内存中的字节码对象转化为机器语言,虚拟机与操作系统交互,使机器语言在机器硬件上运行。
4.运行结束后python解释器则将PyCodeObject写回到pyc文件中。当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
Python解释器执行程序的三个阶段:
第一步:先启动python3解释器。
第二步:Python3解释器就像一个文本编辑器一样将文件python3 D: est.py从硬盘读入内存。
第三步:Python3解释器解释执行文件代码。
只有第三阶段才识别python的语法。
⑼ IE究竟是什么网络浏览器程序解释器、编译器
python,lua还有javascript这些脚本语言其实是通过编译成中间码,然后再解释这个中间码来执行的,所以并不是纯解释的脚本。如果要写一个纯解释的脚本语言解释器,这种解释器的速度肯定不会很快,但是程序可以更简单一些。这对于需要小型的脚本解释器的情况比较适用,因为一个人只要几天就可以完成。比如unix的shell,windows中的cmd等。当然,对于一般的程序员来说,主要是为了嵌入自己的程序。假设我们的脚本包含变量,基本表达式,顺序,分支,循环语句,goto等。手工编写,当然是采用递归下降方法。
变量用一个链表或数组就可以解决。解释赋值语句时,将变量存在符号表中。
表达式已经有很成熟的解决方法,就是一个算符堆栈,一个操作数堆栈,然后按算符优先级来做就可以了
然后我们讨论基本语句的执行
statements==>if_statements,for_statements,goto_statements等
我们用c函数exec_if,exec_for,exec_goto来分别解释它们,用exec_statements()函数来递归调用前面这些函数。
如果是如下顺序执行的脚本,实现是比较容易的,就是顺序执行。
COMMAND:statements;
就是前面是命令后面是语句,在c语言中可以用一个switch轻松搞定。但是如果出现了分支与循环,函数的时候,情况就变得复杂了。先看循环语句,比如如下脚本
for i= 1 to 100 do
statements;
end
假设现在我们已经将脚本都加载到内存中了,有一个char *指针current指向当前的脚本的位置。这个解释执行并不难。先解释for i=1 to 100 do这句,将自变量i保存到符号表中,这时候current已经指向statements了。循环解释执行的c程序伪码如下:
char *old=current;
for(i=自变量开始值;i++;i<自变量目标值)
{
current =old;
执行 statements;(这个过程中current会变化)
}
其中自变量开始值和自变量目标值都可以解释获得,每次执行完statements后在开始循环时恢复current指针即可。
但是分支语句可没这么简单,比如脚本
if exp1 then
statements1;
elseif exp2 then
statements2;
end
假设exp1为真则执行statements1,exp2为真则执行statement2。那么解释执行的时候问题就来了,当exp1为真时
执行完statements1后,我们要跳过statements2到end,然后再执行,同样exp1为假,exp2为真的时候,问题也同样存在,需要跳过statements1.问题是怎么跳过?statements1,statements2均可能包含嵌套的分支或循环。在编译型的脚本中,其实不管是statements1,statements2在编译的时候都是需要编译的,在编译完这些语句后再进行代码回填。这样在执行中间码的过程中exp1,exp2执行完后,就知道跳到哪里执行了,实际上在执行中间码的时候脚本编译器已经进行了一次源码的扫描了,执行的函数不关心这些。但是我们现在是纯解释执行,就是一次扫描了。除了编译成中间码这个方法外,我没有想到更优雅的办法,这个方法因为涉及到编译,不是纯解释因此排除掉。对每种语句都有一个解释执行该语句的函数,例如
for 语句我们用exec_for()函数来执行,if我们用exec_if来执行。一种方法是可以对应编写一个pass函数,例如pass_for(),pass_if(),这样对于statements我们只需要一个pass_statements()函数就可以了,pass_statements()递归调用pass_for,pass_if,这样就可以过滤掉不需要执行的语句了。pass函数只改变current的值而并不执行被pass掉的那些语句。
显然pass_statemts除了不修改符号表,不做其它动作外,其它逻辑流程与exec_statements函数相同。这显然不够优雅。
goto则需要先扫描行号,执行goto时跳到对应的行。
不知有没有更好的coding技巧,探索中。
http://www.learn-it.cn/Info_9509.htm