导航:首页 > 源码编译 > 编译器解释器开发

编译器解释器开发

发布时间:2022-05-22 13:21:12

‘壹’ 编译器和解释器的主要区别是什么他们相对于对方各自的优点

解释器是解释执行的源代码,编译器是将源代码编译成目标代码

他们最大的区别是程序运行时需要解释器边解释边执行,而编译器则在运行时是完全不需要的

解释器的优点是比较容易让用户实现自己跨平台的代码,比如javaphp等,同一套代码可以在几乎所有的操作系统上执行,而无需根据操作系统做修改;
编译器的目的就是生成目标代码再由连接器生成可执行的机器码,这样的话需要根据不同的操作系统编制代码,虽然有像Qt这样的源代码级跨平台的编程工具库,但在不同的平台上仍然需要重新编译连接成可执行文件,但其执行效率要远远高于解释运行的程序。
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)

‘贰’ 解释器与编译器的区别

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)

‘叁’ 编译器与解释器的区别是什么

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)

‘肆’ 编译器具体实现中比较巧妙的思想有哪些

要说编译器实现的巧妙思想,很多都是用来解决工程性问题的,跟编译原理中的算法(解决抽象概念问题 / 学术问题)未必有直接关系。
题主是更想知道某个算法在具体实现中的特点或者说应用方式呢,还是更想了解工程方面的问题呢?
我觉得前者应该有很多人会给出非常有趣的回答,我就主要回答后者的方面吧。解决工程性问题的巧妙技巧也挺吸引人的,而且有非常大量的素材…根本无法列举完。
LLVM
说到编译器实现,不得不落个俗套说说LLVM编译器套件。不用介绍LLVM是啥了,感觉是“地球人都知道”系列。
1、一套IR,三种表现形式:运行时表现形式(llvm/IR,内存中)、序列化表现形式(bitcode,用于存储)、文本表现形式(“LLVM汇编”,便于人阅读和编辑)。三种形式间可以无损变换是LLVM非常非常强大的实现特点之一。
实际使用时能否真的达到无损变换很大程度上取决于要实现的语言有多少东西无法用LLVM IR表达。
例如说如果有语言实现基于LLVM来实现JIT编译器,并且想把一个运行时的对象指针当作常量嵌入生成的代码里,它可以把这个常量构造成LLVM IR,但如果把这个常量序列化到bitcode或生成文本形式,等“下一次编译”再读出来用的话,那个常量指针可能已经不对了。这跟生成PIC(position-independent code)的问题类似,但LLVM没办法帮语言解决这种问题。
也有可能有些语言实现偷懒,有些嵌入LLVM IR的metadata无法无损转换为文本形式,这也不能怪LLVM IR不好,但确实是使用中要头疼的问题…
这种一套IR三种表现形式的设计非常实用,一些新的语言实现项目受其影响也采用了类似的设计。

‘伍’ 如何用basic语言实现一个最简单的解释器/编译器

首先Basic语言是解释型的语言,而C语言是编译型的语言。什么意思呢,就是你编写的Basic语言程序运行的时候需要一个解释器将高级语言代码转为机器码然后才可以执行。C语言程序一般经过编译和联接后直接生成目标代码。目标代码本身就是机器码所以可以直接运行。

从语法来看,C语言是面向过程的语言。Basic语言严格意义上只是一个脚本语言,语法相对来讲非常简单。

另外,C语言是最接近汇编语言的一种语言,功能非常强大,但是要求开发人员对硬件,操作系统等底层的东西要有很深的了解,开发程序相对来讲麻烦一些,但是程序性能非常好。Basic语言相封装了很多底层的东西,所以不要求开发人员有很深的计算机专业背景,开发简单,但是不要指望用Basic语言开发真正的商业程序。

由于以上的区别,造成这两种语言的用途不一样。Basic语言常用来写一些脚本,或者在真正开发之前作一个软件模型。实际开发用C语言以确保运行速度和较小的内存需求等其他性能。

显然,这两种语言还有其他区别,但上面应该是最重要的区别吧

‘陆’ 编译器、解释器、都是需要另外下载并手动整理的吗

绝大部分情况下不需要,我们现在用的都是集成开发环境IDE,它会自动完成你程序写完后的一系列操作,代码写好,点个运行就行了,后面的工作不需要你操心。

集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。如微软的Visual Studio系列,Borland的C++ Builder、Delphi系列等。该程序可以独立运行,也可以和其它程序并用

‘柒’ 超赞,编译器和解释器的异同,瞬间明白了

编译器和解释器的最大不同就是:以 WINDOWS 系统为例进行讲解就是:编译器是可以把用户编写的源程序(例如:C 语言源程序)经过编译、链接产生成一个在 WINDOWS 系统下面可独立运行的二进制代码(以 *.exe 为后缀的);而解释器则必须在高级语言的解释环境中才能够运行用户编写的源程序,一旦退出了解释器,那么用户编写的源程序将无法执行。例如:以前的 BASIC 语言就是解释执行、而不是编译执行的。即:在 BASIC 解释环境中,可以执行用户编写的以 *.BAS 为后缀的源程序,但是一旦退出了 BASIC 解释器,那么用户编写的 *.BAS 源程序就无法执行了。

‘捌’ 什么是 编译器,编辑器,解释器.

编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。
编辑器---从编辑器中也可调用编译器以及与它共用的程序,这样程序员无需离开编辑器就可执行程序。
解释器是能够执行用其他计算机语言编写的程序的系统软件,它是一种翻译程序。

‘玖’ 请问编译程序和解释程序是什么意思什么是编译器、什么是解释器

编译和解释是从源程序到可执行程序转换的两种方法。编译,是在源程序完成后,先转换成中间代码,然后再转换成二进制代码,完成后,每次执行,都直接执行这个二进制代码。一次转换完成。
而解释程序的执行不同,他在执行时,是一次读入一条源代码,然后分析转换成二进制代码,执行这条语句,然后再读入一条源代码,再转换,再执行。是一边转换一边执行。编译器和解释器就是完成编译和解释工作的一个软件。

‘拾’ 解释器的解释编译

解释器运行程序的方法有:
1.直接运行高级编程语言 (如 Shell 自带的解释器)
2.转换高级编程语言码到一些有效率的字节码 (Bytecode),并运行这些字节码
3.以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序 (例如:JIT)
Perl,Python,MATLAB,与Ruby是属于第二种方法,而UCSD Pascal则是属于第三种方式。在转译的过程中,这组高级语言所写成的程序仍然维持在源代码的格式(或某种中继语言的格式),而程序本身所指涉的动作或行为则由解释器来表现。
使用解释器来运行程序会比直接运行编译过的机器码来得慢,但是相对的这个直译的行为会比编译再运行来得快。这在程序开发的雏型化阶段和只是撰写试验性的代码时尤其来得重要,因为这个“编辑-直译-除错”的循环通常比“编辑-编译-运行-除错”的循环来得省时许多。
在解释器上运行程序比直接运行编译过的代码来得慢,是因为解释器每次都必须去分析并转译它所运行到的程序行,而编译过的程序就只是直接运行。这个在运行时的分析被称为直译式的成本。在解释器中,变量的访问也是比较慢的,因为每次要访问变量的时候它都必须找出该变量实际存储的位置,而不像编译过的程序在编译的时候就决定好了变量的位置了。
在使用解释器来达到较快的开发速度和使用编译器来达到较快的运行进度之间是有许多妥协的。有些系统(例如有一些LISP)允许直译和编译的代码互相调用并共享变量。这意味着一旦一个子程序在解释器中被测试并除错过之后,它就可以被编译以获得较快的运行进度。许多解释器并不像其名称所说的那样运行原始代码,反而是把原始代码转换成更压缩的内部格式。举例来说,有些BASIC的解释器会把keywords取代成可以用来在jump table中找出相对应指令的单一byte符号。解释器也可以使用如同编译器一般的文字分析器(lexical analyzer)和语法分析器(parser)然后再转译产生出来的抽象语法树(abstract syntax tree)。
可携性佳,直译式程序相较于编译式程序有较佳的可携性,可以容易的在不同软硬件平台上运行。而编译式程序经过编译后的程序则只限定于运行在开发环境平台。

阅读全文

与编译器解释器开发相关的资料

热点内容
ubuntu压缩zip 浏览:2
vigenere算法的方法是什么 浏览:666
pdf保护破解 浏览:341
仿微信聊天系统源码广州公司 浏览:106
怎么查看我的世界服务器日志 浏览:430
怎么从程序员走到成功 浏览:824
把软件放入文件夹中如何移出 浏览:209
红包源码企业即时聊天软件 浏览:581
xp安装python 浏览:10
西门子参数编程读取半径值 浏览:403
洗首饰解压小视频 浏览:966
01背包问题的算法解决 浏览:373
sd卡放哪个文件夹 浏览:301
解释器模式java 浏览:104
android垂直自动滚动条 浏览:153
计算器java小程序 浏览:27
java的简称 浏览:68
云服务器公网ip地址 浏览:581
php对数据库操作 浏览:237
java爬图片 浏览:866