精华内容
下载资源
问答
  • 解释程序和编译程序的区别

    万次阅读 2019-05-09 15:13:56
    1、什么是编译程序和解释程序 编译程序和解释程序是程序执行的两种不同执行方式。 2、编译程序和解释程序的区别 ...(编译程序一个语言处理程序,它可以把高级语言程序给语言翻译成某个机器的汇编语言程序或者...

    1、什么是编译程序和解释程序

    编译程序和解释程序是程序执行的两种不同执行方式。

    2、编译程序和解释程序的区别

    编译程序:编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序。编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成6个阶段。目标程序可以独立于源程序运行。(编译程序是一个语言处理程序,它可以把高级语言程序给语言翻译成某个机器的汇编语言程序或者是二进制代码程序,这个阶段叫做编译阶段。需要注意的是编译和运行是分两个阶段进行的,也就是说程序必须要全部编译完成后,才能运行。即编程方式执行程序会把源代码翻译成二进制文件的目标代码。)

    解释程序:解释程序是一种语言处理程序,在词法、语法和语义分析方面玉编译程序的工作原理基本相同,但在运行用户程序时,它是直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不生成目标程序,这是它和编译程序的主要区别。(解释程序的工作模式是一个个的获取、分析并且去执行源程序的语句,一旦第一个语句分析结束后,源程序就会开始运行并且去生成结果,它比较适合以交互方式来进行工作的情况。即解释程序不会生成目标代码。)

    PS:编译程序不参与用户程序的运行控制,而解释程序则参与

    展开全文
  • 程序编译的4过程

    千次阅读 2019-01-11 15:00:11
    hello.c(源程序)是条高级C语言程序,虽然它是以种易读的形式,让人们容易理解。但是,它却无法直接驱动硬件CPU直接执行。为了我们编写的hello.c程序可以被执行,驱动硬件电路工作,hello.c程序必须经过一些列...

    0.引言
    hello.c(源程序)是一条高级C语言程序,虽然它是以一种易读的形式,让人们容易理解。但是,它却无法直接驱动硬件CPU直接执行。为了我们编写的hello.c程序可以被执行,驱动硬件电路工作,hello.c程序必须经过一些列处理步骤,将源程序转化为可执行性的目标程序。

    而我们知道,机器语言就是处理器可以直接理解(与生俱来就能理解)的编程语言,机器语言有时也被叫做原生代码(Native Code)[1],而机器语言是一种以“0、1、0、1”的表现形式二进制代码,因此源程序的编译过程任务即就是:将以高级语言编写的程序转换为以二进制代码的可执行性目标程序。

    1.编译过程的四个阶段
    源程序到目标程序执行的四个阶段如图1所示,GCC编译C源代码有四个步骤:预处理—->编译—->汇编—->链接。 


    以源程序hello.c为例
    #include <stdio.h>

    int main()
    {
        printf("happy new year!\n");
        return 0;
    }

    2.预处理阶段(.c—.i)
    编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。

    命令:unix>gcc –o hello hello.c 
    作用:将hello.c预处理输出hello.i

    3 编译(.i—.s)转换为汇编语言文件
    这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言[2]。可用gcc的参数-S来参看。 
    编译器(ccl)将文本文件hello.i 翻译成文本文件hello.s, 它包含一个汇编语言程序。 
    一条低级机器语言指令。 
    命令:gcc -S hello.i -o hello.s 
    作用:将预处理输出文件hello.i汇编成hello.s文件

    4.汇编阶段(.s—.o)得到机器语言
    汇编器as 将hello.s 翻译成机器语言保存在hello.o 中(二进制文本形式)。

    5.链接阶段
    printf函数存在于一个名为printf.o的单独预编译目标文件中。必须得将其并入到hello.o的程序中,链接器就是负责处理这两个的并入,结果得到hello文件,它就是一个可执行的目标文件。
     

    展开全文
  • 从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的,典型的划分方法主要分为6个阶段、如下: ...

    编译过程概述:
    编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的,典型的划分方法主要分为6个阶段、如下:
    源程序 -> 词法分析 -> 语法分析 -> 语义分析 -> 中间代码生成 -> 代码优化 -> 目标代码生成 -> 目标程序


    下面分别简单介绍一下6个阶段的任务

    1、词法分析:
    词法分析是编译过程的第一个阶段,这个阶段的任务是从左到右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(一些场合下也称单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。
    在这个阶段,会将程序变成由标识符、保留字、算符、界符等组成的单词序列。并且自动把空格过滤掉。其中标识符会以id1、id2、id3……这样的内部形式存在。

    2、语法分析:
    语法分析是编译过程的第二个阶段。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”、“语句”、“表达式”等。这种语法短语也称为语法单位,可以表示成语法树
    这里写图片描述
    语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。程序的结构通常是由递归规则表示的。

    词法分析和语法分析本质上都是对源程序的结构进行分析。但词法分析的任务仅对源程序进行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字串,这只要顺序扫描输入流,遇到既不是字母又不是数字的字符时,将前面所发现的所有字母和数字组合在一起构成标识符单词即可。但这种线性扫描不能用于递归定义的语法成分,比如不能用此办法去匹配表达式中的括号。

    3、语义分析:
    语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。例如,语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。

    4、中间代码生成:
    在进行了上述的语法分析和语义分析阶段的工作后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:
    (1)容易生成
    (2)容易将它翻译成目标代码
    很多编译程序采用了一种近似“三地址指令”的“四元式”中间代码,这种四元式形式为:
    (运算符,运算对象1,运算对象2,结果)

    5、代码优化:
    这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。一系列的优化工作诸如公共子表达式的删除、强度削弱、循环优化等优化工作将会在后面的博客里详细介绍。

    6、目标代码生成:
    这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。这是编译的最后阶段,它的工作与硬件系统结构和指令含义有关,这个阶段的工作很复杂,涉及硬件系统功能部件的运用、机器指令的选择、各种数据类型变量的存储空间分配以及寄存器和后缓寄存器的调度等。


    上述就是编译程序的几个工作阶段。但事实上并非所有的编译程序都分成这样几个阶段,有些编译程序并不需要生成中间代码,有些编译程序不进行优化,即优化阶段可省去,有些最简单的编译程序在语法分析的同时产生目标指令代码,如 PL/0 语言编译程序。不过多数实用的编译程序都包含上述几个阶段的工作。

    展开全文
  • .低级语言和高级语言 计算机硬件只能识别由0,1字符序列组成的机器指令,因此机器指令是最基本的计算机语言。用机器语言编制程序效率低,可读性差,也难以理解修改和维护。因此,人民设计了汇编语言,用容易记忆...

    一.低级语言和高级语言

      计算机硬件只能识别由0,1字符序列组成的机器指令,因此机器指令是最基本的计算机语言。用机器语言编制程序效率低,可读性差,也难以理解修改和维护。因此,人民设计了汇编语言,用容易记忆的符号代替0,1序列,来表示机器指令中的操作码和操作数。但汇编语言是面向机器的语言,其书写格式在很大程度上取决于特定计算机的机器指令。机器语言和汇编语言被称为低级语言。

      人们开发了功能更强,抽象级别更高的语言以支持程序设计,因此就产生了面向各类应用的程序设计语言,即高级语言,常见

    的有Java,Python,C,C++,PHP等,这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。

    二.连接程序

      连接程序是将不同的目标文件中编辑或汇编的代码收集到一个可直接执行的文件中。

    三.汇编程序

      汇编语言是为特定计算机设计的面向机器的符号化程序设计语言。用汇编语言编写的程序称为汇编语言源程序。因为计算机不能直接识别和运行符号语言程序,所以要用专门的汇编程序进行翻译。

      汇编程序就是把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编语言源程序由三类语句组成:指令语句,伪指令语句和宏指令语句。

      汇编程序一般需要扫描两次完成汇编过程:将每一条可执行汇编语句转换成对应的机器指令;处理源程序中出现的伪指令和宏指令。

    四.编译程序

    把用高级程序设计语言书写的源程序翻译成等价的计算机汇编语言或机器语言书写的目标程序的翻译程序叫编译程序。

    包括词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成,符号表管理,出错处理阶段,符号表管理和出错管理伴随整个翻译阶段。

    (1)词法分析:编译过程的第一个阶段,对源程序从前到后逐个字符扫描,从中识别出一个个“单词”符号,词法分析输出的单词常以二元组的方式输出,即单词种类和单词自身的值。

    (2)语法分析:是在词法分析的基础上,通过语法规则将单词符号序列分解成各类语法单位,判断整个输入串是否构成一个语法上正确的程序。

    (3)语义分析:包括检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。

    (4)出错管理:分为静态错误和动态错误。动态错误发生在程序运行时,例如变量取零作除数,引用数组元素下标越界等。静态错误指编译时发现的程序错误,分为语法错误和静态语义错误,语法错误包括单次拼写错误,标点符号错误,缺少操作数等,静态语义错误指语义分析时发现的运算符与运算对象类型不合法。

    五.解释程序

    另一种语言处理程序,在词法,语法,语义分析方面和编译程序的原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的内部形式。因此,不产生目标程序。

    效率:编译比解释高

    解释有灵活性和可移植性。

    展开全文
  • 编译原理:什么是编译程序

    千次阅读 2018-04-28 10:25:08
    一个编译程序就是一个语言翻译程序。就是把一种语言书写的程序翻译成另一种语言(目标语言)的等价程序。 重要性: 一个编译程序的重要性体现在它使得多数计算机用户不必考虑与机器有关的繁琐细节,使程序员和...
  • 翻译程序有两种:种是编译程序,它将高级语言源程序次性全部翻译成目标程序,每次执行程序时,只要执行目标程序。另种是解释程序,它的执行过程是翻译句执行句,并且不会生成目标程序。 编译程序是先完整...
  • 编译程序的生成

    千次阅读 2018-03-06 11:36:37
    编译程序的生成 码文不易,希望支持,谢谢-&gt;支持原创 &nbsp;用可运行的代码编制   也就使用汇编甚至机器码,纯手工敲。首先这是可行的,因为最初有人实现过,但是这确实太费力了,而且容易...
  • 什么是编译程序

    千次阅读 2017-05-19 16:04:45
    编译程序一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示...
  • 汇编语言第一个程序

    千次阅读 2016-01-10 19:48:45
    在win7里面编写汇编语言,下载DOSBox就能够在win7里...在DOSBox安装目录下启动DOSBox.exe,启动后可以看到两窗口,窗口1就是服务程序,窗口2才是我们要用的一个虚拟DOS,我们在里面编译、执行汇编代码。 满屏快捷
  • C语言程序设计第五版 谭浩强 第五版课后答案

    万次阅读 多人点赞 2019-06-16 00:27:29
    谭浩强 C语言程序设计第五版 第4章课后答案 3.求两正整数m和n,求其最大公约数和最小公倍数。 #include<stdio.h> void main() { int m, n, t, i, a = 1; scanf("%d%d", &m, &n); if (m < n) ...
  • 1 词法分析:词法分析是第一阶段,这个阶段的任务是从左到右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。 2 语法分析:语法分析的任务是在词法分析的
  • 编译方式是指利用事先编好的一个称为编译程序的机器语言程序,作为系统软件存放在计算机内,当用户将高级语言编写的源程序输入计算机后,编译程序便把源程序整个地翻译成用机器语言表示的与之等价的目标程序,然后...
  • 程序编译的几阶段

    万次阅读 2017-03-14 13:07:01
    程序编译的过程中就是将用户的文本形式的源代码(c/c++)...3、链接,由链接器将代码在执行过程用到的其他目标代码和库文件链接成为一个可执行程序就是目标程序。1、编译编译的过程就是将源代码文件以字符流的形式进
  • 编译程序的工作过程

    千次阅读 2017-04-16 22:17:12
    词法分析:也就是从左到右一个一个的读入源程序,识别一个单词或符号,并进行归类。 语法分析: 在词法分析的基础上,将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等。 语义分析:审查源...
  • 一个c程序编译运行的步骤

    千次阅读 2015-12-24 09:10:33
    一个c程序的步骤: 1、编写c代码: 1.5、在编译前会行进行预编译指令,如:include指令,就是将.h中文件中的内容copy过来 2、编译中的目标代码:二进制。这个过程c的编译器来完成 这个过程c的编译器来完成 会对...
  • 翻译程序、编译程序和解释程序的区别和联系

    万次阅读 多人点赞 2016-08-01 14:17:49
    最近在复习编译原理的时候,就在第一章,发现了一个很有趣的知识点。 翻译程序是指这样一个程序,它把一种语言所写的源程序翻译成与之等价的另一种语言的目标程序。 编译程序是一种翻译程序,它把高级语言所写的源...
  • gcc编译程序阶段 预处理、编译、汇编、链接

    千次阅读 多人点赞 2018-08-16 09:30:05
    这种编译器有一个统称的名字叫做IDE(Integrated Development Environment)中文名字是集成开发环境,为什么叫它集成开发环境,是因为你只需要安装一个vs你就可以做到对代码的编辑、编译、调试等等,每次我们在vs...
  • 一般情况下一个Java文件代表一个类,在编译时会产生一个...一个是那个public类也是该源文件名对应的.class 另一个就是public类名$内部类名.class 取决于你的java源文件中有几个类,在一个源文件中你用class关键字定
  • 编译微信小程序(最新)

    万次阅读 多人点赞 2019-10-14 09:39:41
    首先声明:本文章仅供学习之用,不可它用。 、前言 看到人家上线的小程序的效果,...反编译,其实还是简单的,要想拿到微信小程序源码,找到源文件在手机存放的位置就行,源文件拿到,用反编译脚本跑一下,微...
  • 程序编译整个的过程

    千次阅读 2019-03-18 21:34:56
    应用程序从用户编写的源文件到内存中执行的进程,大致分为了一下几阶段:首先编译程序将源代码编译成了多目标模块,其次通过链接程序将编译好的目标模块,以及所需要的一些库函数链接在一起,形成了完整的装入...
  • 编译程序和解释程序的本质

    千次阅读 2014-11-17 14:08:55
     编译方式是指利用事先编好的一个称为编译程序的机器语言程序,作为系统软件存放在计算机内,当用户将高级语言编写的源程序输入计算机后,编译程序便把源程序整个地翻译成用机器语言表示的与之等价的目标程序,然后...
  • 在安装Ubuntu 16.04的时候,安装的编辑器是sublime text 3,所以一直想将对OpenCV程序编译能力直接配置到sublime里,但是在网上找了好多教程,发现基本上是在sublime里面重新配置一下GCC编译器,但只给了段代码...
  • 、什么是命令行(Windows下)?  命令行(Command Processor)(CMD)是在OS / 2 , Windows CE与Windows NT平台为基础的操作系统(包括Windows 2000,Windows XP,Windows Vista,Windows Server 2003,Windows ...
  • 一个C/C++程序编译到最终生成可执行文件的全过程分析C源程序-&gt;编译预处理-&gt;编译-&gt;优化程序-&gt;汇编程序-&gt;链接程序-&gt;可执行文件 1.编译预处理 读取c源程序,对其中...
  • 编译程序和解释程序

    千次阅读 2018-05-28 14:15:28
    编译程序一个语言处理程序,它可以把高级语言程序给翻译成某个机器的汇编语言程序或者是二进制代码程序,这个阶段叫做编译阶段,需要注意的是编译和运行是两个分开的阶段,也就是说我程序必须要全部翻译完毕之后,...
  • C/C++程序编译的四过程

    千次阅读 2018-08-13 15:24:31
    我为什么会选择Linux下的g++编译器,就是因为g++可以看到程序编译到运行的过程做了些什么。而VS等集成开发环境看不到这些,并不是说VS工具不好,(VS还是相当好用的...)。对于学习来说,需要知道程序编译到运行...
  • 上篇我们介绍了什么是编译程序,简单提到了这“工厂”工作的六阶段。本篇介绍一下这六阶段。 “工厂”导航图(翻译工作的过程):
  • 编译获取小程序

    万次阅读 2018-07-11 18:13:41
    之前因为开发笔记本突然出了毛病,导致小程序的源代码全部丢失了,参照网上大神的博客,反编译wxapkg文件,生成小程序源码,这些原创的作者是真的强。   参考文章:...
  • 程序员撩妹:C语言表白程序,一撩一个准!

    万次阅读 多人点赞 2019-03-24 16:04:10
    你以为C语言就只是以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器以及超级电脑等作业平台吗?你以为C语言就是辣么高大上,辣么不接地气的吗? 下面是一份C/C++资料,加小编C/...
  • gcc编译程序的四阶段(预处理-编译-汇编-链接)

    万次阅读 多人点赞 2016-07-06 20:08:34
    gcc的编译流程分为四步骤,分别为: ・ 预处理(Pre-Processing) ・ 编译(Compiling) ・ 汇编(Assembling) ・ 链接(Linking) 下面就具体来查看一下gcc是如何完成四步骤的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,368,091
精华内容 547,236
关键字:

一个编译程序就是一个