当前位置:首页 » 编程软件 » 计算机编译器开发

计算机编译器开发

发布时间: 2022-11-03 18:49:15

1. 计算机编译器是什么,怎么用

计算机编译器可以说是计算机软件的生产工具,几乎所有的软件都是由编译器编译而成的。用的方法有两种,第一个种是集成在了开发环境里,第二种是用命令行编译。

2. 编译器是什么

简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)
高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、Java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。最后运行的时候通过通用语言运行库的转换,编程最终可以被CPU直接计算的机器码(NativeCode)。
编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。
典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的EXE,
所以我们电脑上的文件都是经过编译后的文件。

3. 计算机各种语言编译器怎么来的

大部分的语言编译器都是用C开发的(核心部分则可能用到汇编),这一点与操作系统的开发类似(比如linux或者Windows),后期的各种IDE或者软件部分可能用诸如C++、Delphi(这两个在linux上都有对应的版本)或者VB等等开发。

最初的汇编编译器当然是直接用二进制机器码开发的。“是不是这个编译器编写出的程序也必须在这个相应的操作系统上运行?”这个并不完全正确,有些语言是可以跨平台运行的的,比如JAVA,它的口号就是,“一次编译,到处运行”

4. 计算机语言的编译器是怎么开发的

编译器用语言都写编译器主要功能进行词、语、语义析间代码优化间代码根据间代码汇编语言汇编语言变机器码整编译器算用任意语言实现

5. 计算机编译程序主要是做什么工作

编译程序就是将高级语言程序设计语言源程序翻译成计算机可执行代码的软件

6. 计算机语言 编译器的问题

简单点说你就是想知道程序设计语言、编译器和开发环境之间的关系吧。

程序开发一般分为3个阶段:1、编码阶段,2、编译阶段,3、运行阶段。

编码阶段使用的就是程序设计语言,在楼主这就是Fortran。程序设计语言除了定义了文法以外,其他的任何事情他都不做

至于编译阶段使用的就是编译器。编译器与程序设计语言的关系就是,翻译者与语言的关系。
因为计算机是无法识别程序设计语言的(Fortran),它只能识别机器语言或者汇编语言,而编译器的作用就是把Fortran翻译成机器语言或者汇编语言。

至于开发环境,就是程序运行时的环境。简单的可以理解为楼主安装的软件。
编译器 是开发环境的一部分。
开发环境,一般包括代码编辑器、编译器、调式工具等。

至于楼主要的开发软件,网络一下很多的,所以不用担心。
实在找不到,楼主可以找我

7. 开发新的计算机语言是不是就是开发新的编译器

计算机语言和编译器完全不能等同。
1、英国和美国,是不同国家,但官方语言属于同一语系。
2、对于Pascal语言,有Turbo Pascal、Delphi、Free Pascal等等;虽然这些编译器可能运行在不同平台上,执行标准不同,语法也不同,但都可以统称为Pascal编译器。
C++之类的,有VC、Borland C++ Builder...
至于汇编,就更多了...
3、你自己如果有时间,完全可以自定义一套完备的词法、语法规则,也可以称作开发了一种新的计算机语言;但是如果要写出可以编译这套语法的编译器,就不是那么简单了。

8. 怎么研发一款编程语言

编程语言,作为人与计算机沟通的桥梁,有着重要和深远的意义。有过计算机编程经验的人,多少学习或掌握过一到多种编程语言。计算机专业领域的编程语言成百上千种,主流的编程语言也有数十种之多。每种编程语言面向的领域和特性都不尽相同,不过归根结底是为了解决人与计算机之间沟通的效率问题,提高计算机的生产力。想必有不少人对那些主流编程语言的创造者十分倾佩,也相信有不少人会好奇一门编程语言是如何诞生的。那么如何创造一门编程语言呢?
总的来看,创造一门编程语言需要有以下几个过程:
(1)设计语言的特性。
(2)定义语言的单词、语法和语义。
(3)实现编译器或者解释器将程序翻译为计算机底层表示。
(4)生成计算机程序的二进制存储格式。
(5)完善语言的运行时环境和标准库。

一、语言特性设计
所谓语言特性,就是编程语言为开发者提供了什么样的原子性功能特征。比如是否支持数学表达式计算、字符串处理,是否支持变量、函数和递归,是否支持分支、循环复合语句等。语言的变量类型是强类型、弱类型,还是动态类型,程序是过程式、函数式,还是面向对象的。是否支持模板、泛型和反射机制,是否支持多线程和并发特性,是否支持错误和异常处理机制等等。
语言特性设计是一门编程语言最关键的环节,直接决定了语言的基本特征和雏形。当然,这也是最难的一个环节,因为语言设计是面向具体问题领域的,是语言设计者从大量的编程实践中的获得的总结和升华。比如C语言设计者希望面向计算机底层,拥有对操作系统和硬件的直接操纵能力。而Python的设计者则希望尽可能地减少操作计算机资源的繁琐过程,以获得语言的简洁性、高度的灵活性和扩展性。SQL的设计者面向具体的数据查询和分析领域,希望帮助开发者获得快速检索和操纵数据的能力。而Go语言的设计者则希望在保留C语言优秀功能的基础上,扩展编程语言对高并发环境的支持,并拥有垃圾回收和快速编译的能力。
凡此种种,编程语言特性的设计都是面向具体的问题领域的,是语言设计者构建于开发者和计算机之间的中间层,是对开发过程中重复功能逻辑的原子性“封装”,最终的目的是为了提升具体问题领域内的软件开发效率。

二、单词、语法和语义
和人类使用的自然语言类似,编程语言也有自身的单词、语法和语义,专业上称为词法记号、语言文法和语义。
常见的词法记号可以分为数字、字符、字符串、标识符、关键字,以及用于连接表达式的运算符、分割语句或者程序段落的界符等符号。这些是编程语言程序的基本单位,通过它们的有序组合,构建出了一门编程语言形形色色的代码片段。
编程语言的文法是用来描述语言的语法规则的,具体来说是规定词法记号之间的排列组合的顺序与规则。它描述了编程语言程序的基本模式,不符合该模式的词法记号的排列被挡在了合法语言程序的大门之外。同时,它也是各种编程语言对于开发者最明显的差异化特征。一个有经验的开发者可以很容易地通过扫视一段代码,就能分辨出这是哪种编程语言编写的计算机程序。
编程语言的语义描述了一段符合语言语法的程序,对于计算机而言的真正含义,是开发者最终要传达给计算机的意愿和指令。语言的语义必须是准确的、无二义性的,编译器也正是通过语义的指导,将计算机程序翻译为计算机可识别的表达形式。

三、程序的翻译
计算机程序是用来供人阅读和修改的,计算机硬件并不能理解程序内的思想和含义。因此,必须有一个翻译转换的过程,将人所表达的意愿准确无误地传递给计算机,让计算机明确并执行人下发的指令。实现这种翻译工作的工具就是编译器或解释器。
对于编译器来说,它的输入是人类书写的计算机语言程序,输出则是计算机可识别的底层表示。首先,它需要识别出程序中的单词,即词法分析。然后,根据单词的组合模式识别出程序的语法结构,即语法分析。最后,根据不同的语法结构对应的语义,将程序按照每个语法模块的形式转换为计算机可识别的指令序列,即语义分析和目标代码生成。
众所周知编译器的实现具有一定的复杂度,其根本原因来自于语言语法的结构灵活性和计算机底层表达形式的多样性,这也是创造一门编程语言最核心的环节。

四、二进制存储
编译器将语言程序翻译转换后,需要将转换后的结果存储起来,以便计算机在需要的时候将其加载、执行。这里不可避免的涉及到两个问题:
(1)转换后的结果是什么样的形式?
(2)转换后的结果保存在哪里?
第一个问题描述的是计算机程序被转换为怎样的形式,才是计算机可以识别的。由于计算机中实际运行程序的硬件模块是CPU,因此计算机程序只有被转换为CPU的二进制指令格式才能被正确识别、执行。比如常见的Intel体系的CISC指令格式、ARM体系的RISC执行格式等。
第二个问题描述的是计算机程序转化为二进制指令格式后,以什么样的方式保存在计算机的磁盘上。由于绝大多数的计算机程序是需要通过运行在计算机硬件之上的操作系统加载运行的,因此计算机程序的二进制表达形式必须以对应操作系统可识别的文件格式存储。比如常见的Windows操作系统的PE文件格式、Linux操作系统的ELF文件格式等。

五、运行时环境和标准库
理论上讲,一门编程语言如果能提供出完备的操纵操作系统和硬件的原子性功能就已经成功了。但是不提供强大的运行时环境支持和标准库,是很难让一门编程语言真正的好用和流行的。没有人希望简单地打印一行字符串,还需要使用编程语言提供的基本特性实现调用操作系统提供的打印接口的逻辑。Java语言之所以久兴不衰,正是因为它不仅提供了完善的运行时环境和开发库支持,甚至提供了更强大的开发框架和工具支持。
因此可见,除了完备的语言特性,为开发者提供更方便好用的库和框架支持,消除软件构建过程中复杂和重复的逻辑,才是一门优秀编程语言的长盛之道。

六、自己动手,立即开始!
《自己动手构造编译系统——编译、汇编与链接》一书详细阐述了一门编程语言从无到有的过程,从语言的功能特性设计,到词法、文法、语义分析;从编译器、汇编器的设计实现,到目标文件的链接生成可执行文件;甚至编译优化器的实现、二进制指令、可执行文件格式以及语言运行时和标准库的概念,都在书中做了认真细致地剖析。相信对本书的阅读,将是一次不错的获得知识的体验!

9. 计算机语言是如何开发出来的

计算机语言是“设计”出来的,设计只需要思考和写文档,而该语言的编译器才是“开发”出来的。编译器也是程序,所以也需要用编程语言来编写,至于用什么语言就随开发者的便了。很多编程语言是用别的更基础的语言开发的,其中用最多的就是C语言。C语言编译器很多,大部分都是用别的C语言编译器编译出来的,而最早的C语言编译器是用汇编语言写出来的,最早的汇编语言编译器是通过“编译器自举”开发出来的。
相关回答
一个很深奥的问题
一、新建项目 启动Microsoft Visual Studio 。NET,新建一个C#项目MyApp,本例工程存放于F:\Csharp\MyApp。 二、添加控件 在Form1 窗体上添加三个控件(见图1):主菜单MainMenu、标签Label1和按钮Button1。
Label1和Button1控件的属性均采用缺省设置。MainMenu控件中添加三个菜单项menuItem1、menuItem2、menuItem3。Text属性分别设为“语言”、“中文”和“English”。
menuItem2、 menuItem3 的RadioCheck属性设为True。 图 1 三、创建配置文件 在项目中添加一个文本文件 i,保存当前程序的语言版本设置。该文件中只有一行内容。
如果是“English”,则表示程序为英文版;如果是“Chinese”则为中文版。这里暂且保存为“English”。 四、创建资源文件 。NET中的资源文件有三种: 文本(。txt )文件、XML 格式的。

10. 编译器和开发环境的关系

谈谈程序设计语言、编译器和开发环境之间的关系

许多初学者都会对这三个概念区分不清,应该说这三个概念是完全不同的,不能混为一谈。在本文中,我就尽我最大的能力来讲讲这三个概念以及他们之间的关系。

首先说程序设计语言,它同人类的自然语言一样也是一个语言,并且它是自然语言的一个子集。大家都知道自然语言是极其庞大和复杂的系统,具有很多不不确定性和不精确性,因此至今我们也没有办法对自然语言进行形式化的描述。程序设计语言只是自然语言的一个很小的子集,在计算机系统中,一切都是需要确定性和精确性的描述,因此程序设计语言也是极为规范的,在程序设计语言中,几乎就不允许存在不确定性和不精确性,也就是说不能存在文法的二义性。这样一个程序设计语言就可以通过一系列的产生式来进行形式化的描述,这一系列的产生式就被称为文法,语言就是由文法来定义的。从另外一个角度来说,一个程序设计语言,它仅仅是一个语言,它只对程序进行形式上的要求。或者说,程序设计语言对应于编程中的编码阶段。我们有必要对程序开发的三个阶段进行了解,程序开发从时间先后顺序上可以分为三个阶段:1.编码阶段,2.编译阶段,3.运行阶段。在编码阶段,我们使用的就是程序设计语言。语言除了定义了文法以外,其他的任何事情他都不做。当然一种语言也有很多种版本,比如 BASIC 语言,就有很多种版本,C语言也是如此。这里所讲的语言的版本与编译器的版本是不一样的。C语言的标准版本就是 ANSI C,如果初学者会提出这样的问题“C语言哪个更好?”,这样的问题反映出他们对语言与编译器之间的关系的认识的不足。如果从语言的角度来讲 VC 和 TC 是没有多大区别的,他们基本上都能支持 ANSI C。

再来看看编译器。编译器与语言的关系就是,翻译者与语言的关系。编译器就是一个翻译,他把使用某种语言书写的源程序,翻译成为等价的使用目标语言书写的目标程序。前面我们也说了,语言是一个抽象的概念,是由文法来定义的。唯一实在的东西,也就是定义语言的文法。在使用语言时,我们只能说,使用这种语言去书写一段程序。编译器则是能够将某种语言的源程序进行翻译,然后生成目标程序。我们通常会说,某个编译器支持了什么语言,也就是说这个编译器能识别并翻译这种语言。现在的C编译器,一般都是支持了 ANSI C 语言的,另外,编译器的设计者可能还会对 ANSI C 进行一定的扩充,而且各个编译器进行扩充功能都是不同的,因此可能就会出现一个编译器诞生以后,就会出现一个新的语言的现象。TC 和 VC 就分别对 ANSI C 进行了不同的扩充,比如在 TC 中有 far 等关键字,ANSI C 中是没有的,在 VC 中有内嵌汇编的语法 _asm,而在 TC 中则是使用 asm 关键字,这些内容在 ANSI C 中没有的。编译器的输入时源程序,而其输出则是目标程序。一般情况下,源程序是使用某种高级语言书写的,而目标程序则是某个特定机器的机器语言程序。另一方面,编译器除了提供编译功能,还会提供一些运行库。所谓运行库就是由一些事先写好的子程序所组成的子程序库。例如C语言中的 printf 函数,就是由C的运行库提供的。在 ANSI C 中定义了一些C语言的标准库函数,这些库函数是标准C必须具备的,也可以说这些库函数成为了 ANSI C 的一个部分。另外,不同的编译器还可以提供自己的,非标准的库给用户使用,在 TC 中的 Graphics 库,其实就是由 TC 提供的,它不是属于 ANSI C 的。简单的说,编译器是由编译程序和运行库组成的。在程序的编译阶段,就是使用编译器对源程序进行编译生成目标程序。

在程序的运行阶段则是在一个特定的平台上,由这个平台来执行编译生成的程序。Java 虚拟机是一个平台,DOS 和 Windows 也是平台,编译器的作用就是沟通源程序和程序的运行平台。源程序相对于一个运行平台来说是不可识别的,但当编译器将源程序编译成为这个平台所能够识别的目标语言以后,程序就可以在这个平台上运行了。

应该看到,编译器在其中起到了很重要的作用。我们现在可以明确一些概念了,程序设计语言只是语言,它本身很难说有什么好坏,这就如同说“汉语和英语哪个好”一样。使用某一种程序设计语言,我们可以书写自己的程序,从而向计算机表达自己希望完成的功能。这个阶段,我们称为编码阶段。编译器由编译程序和运行库组成,编译程序负责将源程序翻译成为目标程序,运行库提供了一些基本的子程序给程序编写者使用。我们可以说编译器是否支持某种语言,例如 TC 编译器是支持 ANSI C 的,而 GCC 则是一个能够支持多种语言的编译器。然而不同的编译器除了提供对某种语言的支持以外,还可能对该语言进行了某些功能扩充。编译器在对语言的支持上,差别都是不太大的,这是因为许多语言都制定了一个标准,例如 ANSI C。编译器的另外一个重要特性,就是对运行平台的支持。平台指的是一个程序运行所需要的所有软件和硬件的基础。编译器对运行平台的支持,是通过将源程序编译成为目标程序,以及编译器所提供的运行库来实现的。例如,TC只能将C源程序编译生成,使用 80x86 CPU,操作系统为 DOS 的 16bit DOS 程序。VC只能将C源程序编译生成 80x86 CPU、操作系统为 Windows 的 32bit Windows 程序。使用编译器对源程序进行编译被称为编译阶段,这个阶段编译程序将源程序编译为某个平台的目标代码。程序在具体的平台上运行时,被称为运行阶段。应该指出,在编码阶段使用到的是程序设计语言,以及编译器所提供的库函数,这个阶段产生的是源程序。在编译阶段使用的是源程序和编译器,这个阶段产生的是目标程序。在运行阶段使用到的是目标程序和运行平台,这个时候产生的是程序运行结果。

因此说讨论一个程序设计语言好坏没有多大意义,因为他们使用的场合不同,比如汇编语言和 Java 语言,要谈论这两个语言的好坏是没有实际意义的。而说“C语言哪个好”之类的话也是没有意义的,我想大家学的C也就是在 ANSI C 基础上的C,并且不同的C语言之间的差别是极小的。我们通常指的 TC、VC 都是指编译器,而不是语言。编译器能够支持一种或者多种的程序设计语言,TC 能够支持 ANSI C,VC 能够支持 ANSI C 和 ANSI C++,而 GCC 则是一个支持多语言的编译器。如果真要说 VC 比 TC 好,只能说 VC 编译器提供的库函数更多,并且 VC 能够支持的平台是 Windows,而 VC 编译出来的代码也都是 32bit 的。

在以上概念中纠缠了这么久,我也不再想多说了。再来看开发环境。为了能够方便程序设计者进行编码、调试等工作,编译器制造商在制作好一个编译器以后,都会提供一个集成开发环境(又称为IDE)。在这个 IDE 中,用户可以完成编码、编译、调试、运行的全部工作。并且在最新的IDE中,可能还会提供一个可视化的设计功能,可以方便用户进行程序界面的设计。例如 VB 等。另外一个方面,开发环境除了包括 IDE 以外,还包括了程序运行的平台。比如硬件是 IBM PC 兼容机,操作系统是 Windows 等。

可能,能讲的也就这么多了,感觉讲的并不是很好,不过我已经尽力了。有些东西是很难说清楚的,“只能意会不可言传”指的就是这个了。不要怪我讲的不好,还是自己用心去理解和体会吧。

热点内容
09压缩饼干 发布:2025-05-15 05:05:58 浏览:279
迭代法编程c 发布:2025-05-15 04:58:01 浏览:814
用什么dns服务器地址快 发布:2025-05-15 04:52:59 浏览:27
手机端so反编译 发布:2025-05-15 04:50:55 浏览:610
linuxlamp安装 发布:2025-05-15 04:50:45 浏览:578
sqlplus缓存区怎么设置 发布:2025-05-15 04:50:44 浏览:858
shell脚本环境变量 发布:2025-05-15 04:45:18 浏览:693
安卓nba2k18什么时候出 发布:2025-05-15 04:38:42 浏览:393
王者安卓转苹果为什么显示失败 发布:2025-05-15 04:35:49 浏览:18
手机优酷缓存视频格式 发布:2025-05-15 04:13:45 浏览:210