精华内容
下载资源
问答
  • 编译过程一般分为五个阶段

    千次阅读 2019-10-29 16:52:22
    下面是对编译过程的五个阶段的详解 对于编译程序的工作,从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。但就其过程而言,它与人们进行自然语言直接的翻译有许多相近之处。当我们把一种文字翻译为另...

    下面是对编译过程的五个阶段的详解

    对于编译程序的工作,从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。但就其过程而言,它与人们进行自然语言直接的翻译有许多相近之处。当我们把一种文字翻译为另一种文字,例如把一段英文翻译为中文时,通常需要经以下列几个步骤:

     

    (1)先要识别出句子中的一个个单词;

     

    (2)分析句子的语法结构;

     

    (3)根据句子的含义进行初步翻译;

     

    (4)对译文进行修饰;

     

    (5)写出最后的译文。

     

    类似地,我们可以把编译程序的工作过程划分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化和目标代码生成。

     

    第一阶段:词法分析

     

    词法分析的任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如基本字(begin、end、if、for、while),标识符、常数、运算符和界符(标点符号、左右括号)。

     

    单词符号是语言的基本组成成分,是人们理解和编写程序的基本要素。识别和理解这些要素无疑也是翻译的基础。如同将英文翻译成中文的情形一样,如果你对英语单词不理解,那就谈不上进行正确的翻译。在词法分析阶段的工作中所依循的是语言的词法规则(或称构词规则)。描述词法规则的有效工具是正规式和有效自动机。

     

    第二阶段:语法分析

     

    语法分析的任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴),如“短语”、“句子”、“程序段”和“程序”等。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。语法分析所依循的是语言的语法规则。语法规则通常用上下文无关文法描述。词法分析是一种线性分析,而语法分析是一种层次结构分析。例如:Z= X + 0168*Y;代表一个“赋值语句”,而其中的代表X + 0168*Y一个“算术表达式”。因而,语法分析的任务就是识别X + 0.618 * Y为算术表达式,同时,十倍上述整个符号串属于赋值语句这个范畴。

     

    第三阶段:词义分析与中间代码产生

     

    这一阶段的任务是:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。这一阶段通常包含两个方面的工作。首先,对每种语法范畴进行语义i安插,例如,变量是否定义、类型是否正确等等。如果语义正确,则进行另一方面工作,即进行中间代码的解释。这一阶段所依循的是语言的语义规则。通常使用属性文法描述语义规则。“翻译”仅仅在这里才开始涉及到。所谓“中间代码”是一种含义明确、便于处理的记号系统,它通常独立于具体的硬件。这种记号系统或者与现代计算机的指令形式有某种程度的接近,或者能够比较容易地把它变换成现代计算机的机器指令。例如,许多编译程序采用了一种与“三地址指令”非常近似的“四元式”作为中间代码。它的意义是:对“左右操作数”进行某种运(由“算符”指明),把运算所得的值作为“结果”保留下来。在采用四元式作为中间代码的情形下,中间代码产生的任务就是按语言的语法规则把各类范畴翻译成四元式序列。一般而言,中间代码是一种独立于具体硬件的记号系统。常用的中间大妈,除了四元式之外,还有三元式、间接三元式、逆波兰记号和树形表示等等。

     

    第四阶段:优化

     

    优化的任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。优化的主要方面有:公关子表达式的提取、循环优化、删除无用代码等等。有时,为了便于“并行运算”,还可以对代码进行并行化处理。优化所依循的原则是程序的等价变换规则。

     

    第五阶段:目标代码生成

     

    这一阶段的任务是:把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码。这阶段实现了最后的翻译,它的工作有赖于硬件系统结构和机器指令含义。这阶段工作非常复杂,设计到硬件系统功能部件的运用,机器指令的选择,各种数据类型变量的存储空间分配,以及寄存器和后援寄存器的调度,等等。

     

    目标代码的形式可以是绝对指令代码或可重定位的指令代码或汇编指令代码。如目标代码是绝对指令代码,则这种目标代码可立即执行。如果目标代码是汇编指令代码,则需汇编器汇编之后才行运行。必须指出,现在多数实用编译程序所产生的目标代码都是一种可重定位的指令代码。这种目标代码在运行前必须借助于一个连接装配程序把各个目标模块(包括系统提供的库函数)连接在一起,确定程序变量(或常数)在主存中的位置,装入内存中指定的起始地址,使之成为一个可以运行的绝对指令代码程序。

    展开全文
  • 编译过程的五个阶段

    千次阅读 2014-08-22 15:44:18
    编译程序的工作,从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。但就其过程而言,它与人们进行自然语言直接的翻译有许多相近之处。当我们把一种文字翻译为另一种文字,例如把一段英文翻译为中文时,...

    编译程序的工作,从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。但就其过程而言,它与人们进行自然语言直接的翻译有许多相近之处。当我们把一种文字翻译为另一种文字,例如把一段英文翻译为中文时,通常需经下列步骤:

    (1)识别出句子中的一个个单词;

    (2)分析句子的语法结构;

    (3)根据句子的含义进行初步翻译;

    (4)对译文进行修饰;

    (5)写出最后的译文。

    类似地,编译程序的工作过程一般也可以划分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。

    第一阶段:词法分析

    词法分析的任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如基本字(begin、end、if、for、while),标识符、常数、运算符和界符(标点符号、左右括号)。

    单词符号是语言的基本组成成分,是人们理解和编写程序的基本要素。识别和理解这些要素无疑也是翻译的基础。如同将英文翻译成中文的情形一样,如果你对英语单词不理解,那就谈不上进行正确的翻译。在词法分析阶段的工作中所依循的是语言的词法规则(或称构词规则)。描述词法规则的有效工具是正规式和有效自动机。

    第二阶段:语法分析

    语法分析的任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴),如“短语”、“句子”、“程序段”和“程序”等。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。语法分析所依循的是语言的语法规则。语法规则通常用上下文无关文法描述。词法分析是一种线性分析,而语法分析是一种层次结构分析。例如:

    Z = X + 0.618 * Y;

    代表一个“赋值语句”,而其中的X + 0.618 * Y 代表一个“算术表达式”。因而,语法分析的任务就是识别X + 0.618 * Y为算术表达式,同时,十倍上述整个符号串属于赋值语句这个范畴。

    第三阶段:词义分析与中间代码产生

    这一阶段的任务是:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。这一阶段通常包含两个方面的工作。首先,对每种语法范畴进行语义i安插,例如,变量是否定义、类型是否正确等等。如果语义正确,则进行另一方面工作,即进行中间代码的解释。这一阶段所依循的是语言的语义规则。通常使用属性文法描述语义规则。

    “翻译”仅仅在这里才开始涉及到。所谓“中间代码”是一种含义明确、便于处理的记号系统,它通常独立于具体的硬件。这种记号系统或者与现代计算机的指令形式有某种程度的接近,或者能够比较容易地把它变换成现代计算机的机器指令。例如,许多编译程序采用了一种与“三地址指令”非常近似的“四元式”作为中间代码。这种寺院是的形式是:

    算符左操作数右操作数结果

     

    它的意义是:对“左右操作数”进行某种运算(由“算符”指明),把运算所得的值作为“结果”保留下来。在采用四元式作为中间代码的情形下,中间代码产生的任务就是按语言的语法规则把各类范畴翻译成四元式序列。例如,下面的赋值语句

    Z = (X + 0.418) * Y / W;

    可被翻译为如下的四元式序列:

    image

    其中,T1和T2是编译期间引进的临时工作变量;第一个四元式意味着把X的值加上0.418存放在T1中;第二个四元式值将T1的值和Y的值相乘存于T2中;第三个四元式指将T2的值除以Y的值留结果于Z中。

    一般而言,中间代码是一种独立于具体硬件的记号系统。常用的中间大妈,除了四元式之外,还有三元式、间接三元式、逆波兰记号和树形表示等等。

    第四阶段:优化

    优化的任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。优化的主要方面有:公关子表达式的提取、循环优化、删除无用代码等等。有时,为了便于“并行运算”,还可以对代码进行并行化处理。优化所依循的原则是程序的等价变换规则。

    第五阶段:目标代码生成

    这一阶段的任务是:把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码。这阶段实现了最后的翻译,它的工作有赖于硬件系统结构和机器指令含义。这阶段工作非常复杂,设计到硬件系统功能部件的运用,机器指令的选择,各种数据类型变量的存储空间分配,以及寄存器和后援寄存器的调度,等等。

    目标代码的形式可以是绝对指令代码或可重定位的指令代码或汇编指令代码。如目标代码是绝对指令代码,则这种目标代码可立即执行。如果目标代码是汇编指令代码,则需汇编器汇编之后才行运行。必须指出,现在多数实用编译程序所产生的目标代码都是一种可重定位的指令代码。这种目标代码在运行前必须借助于一个连接装配程序把各个目标模块(包括系统提供的库函数)连接在一起,确定程序变量(或常数)在主存中的位置,装入内存中指定的起始地址,使之成为一个可以运行的绝对指令代码程序。

    展开全文
  • 编译过程包括哪几个主要阶段及每个阶段的主要功能。 词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出单词, 语法分析阶段:机器通过词法分析,将单词序列分解成不同的语法短语,确定整个...

    编译过程包括哪几个主要阶段及每个阶段的主要功能。

    词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出单词,

    语法分析阶段:机器通过词法分析,将单词序列分解成不同的语法短语,确定整个输入串能够构成语法上正确的程序。

    语义分析阶段:检查源程序上有没有语义错误,在代码生成阶段收集类型信息

    中间代码生成阶段:在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式

    代码优化:这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间

    目标代码生成:这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码

    转载于:https://www.cnblogs.com/dtx123/p/11457366.html

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

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


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

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

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

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

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

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

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

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


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

    展开全文
  • 编译原理_编译过程概述

    千次阅读 2019-04-11 01:26:12
    文章目录概述词法分析语法分析语义分析中间代码生成代码优化目标代码生成符号表管理(表格管理)出错处理 概述 编译程序即是将高级语言书写的源程序翻译成与之等价的目标...中间代码为分水岭的原因是把编译过程分解...
  • iOS编译过程的原理和应用

    万次阅读 多人点赞 2016-12-10 11:58:12
    前言 一般可以将编程语言分为两种,编译语言和直译式语言。...直译式语言不需要经过编译过程,而是执行的时候通过一个中间的解释器将代码解释为CPU可以执行的代码。所以,较编译语言来说,直译式语言效率
  • 平常的应用程序开发过程中,我们很少需要关注编译和链接的过程,因为通常都是集成的开发环境下运行,因此一般编译和链接都是一步完成,通常将这种编译和连接合并到一起的过程称为构建。这样虽然简便,但是这...
  • 2. 程序编译的四个阶段

    万次阅读 多人点赞 2018-07-28 22:53:14
    0.引言hello.c(源程序)是一条高级C语言程序,虽然它是一种易读的形式,让人们容易理解。但是,它却无法直接驱动硬件CPU直接执行。为了我们编写的hello.c程序可以被执行,驱动硬件电路工作,hello.c程序必须经过...
  • C/C++程序编译过程详解

    万次阅读 多人点赞 2017-11-13 14:51:06
    C/C++程序编译过程详解 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件...
  • C++编译链接全过程

    千次阅读 2018-07-22 16:47:00
    今天博文主要讨论的问题是:我们编写的程序代码是怎样运行起来...(1)由源文件“.cpp/.c”生成“.i”文件,这是编译阶段完成的;gcc -E .cpp/.c --->.i (2)主要功能  展开所有的宏定义,消除“#de...
  • Java程序编译过程和执行流程------JVM

    千次阅读 2019-12-16 09:17:01
    程序执行流程我把它划分为以下几个步骤:编辑源码、编译生成class文件、(加载class文件、运行class字节码文件),其中后两个步骤都是jvm虚拟机上执行的。 JVM把内存分为方法区、Java栈、Java堆、本地方法栈、...
  • 编译程序的工作过程

    千次阅读 2017-04-16 22:17:12
    编译程序的工作过程一般划分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。 词法分析:也就是从左到右一个一个的读入源程序,识别一个单词或符号,并进行归类。 语法分析:...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    你做的页面哪些流览器测试过?这些浏览器的内核分别是什么? 21 每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗? 21 Quirks模式是什么?它和Standards模式有什么区别 21 div+css的布局较...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    测试开发笔记 第一章 测试基础 7 什么是软件测试: 7 ★软件测试的目的、意义:(怎么做好软件测试) 7 3.软件生命周期: 7 ...5.各阶段输入、输出标准以及入口、出口准则:(测试阶段过程要素) 1...
  • 软件测试面试题汇总

    万次阅读 多人点赞 2018-09-27 12:31:09
    使用的过程中,有什么问题? ................................................................................. 5 7 、描述测试用例设计的完整过程? ......................................................
  • 1)简述编译程序与翻译程序、汇编程序的联系与区别...另一种是解释程序,它的执行过程是翻译一句执行一句,并且不会生成目标程序。 编译程序是先完整编译后运行的程序,如C、C++等;解释程序是一句一句翻译且边翻译...
  • 编译原理】引论

    千次阅读 2020-02-18 20:59:54
    文章目录编译原理引论(一)认识编译程序(二)编译过程概述1、阶段划分2、编译程序的结构3、编译程序的生成 编译原理引论 (一)认识编译程序 什么是编译程序? 这要从翻译程序、解释程序以及编译程序的联系与区别...
  • 一般整个过程划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成6个阶段。 有一种说法 编译有七个过程 预处理,词法分析,语法分析,语义分析,中间代码产生,代码优化,目标代码产生。...
  • ERP

    千次阅读 2018-11-14 22:16:03
    ERP是Enterprise Resource Planning(企业资源计划)的简称,是上个世纪90年代美国一家IT公司根据当时计算机信息、IT技术发展及企业对供应链管理的需求,预测今后信息时代企业管理信息系统的发展趋势和即将发生...
  • 编译概述与引论

    千次阅读 2016-07-20 20:02:08
    本博文,介绍编译程序的基本概念,概述编译过程和编译程序结构,编译程序和程序设计环境以及编译程序的生成过程和构造工具知识。什么叫编译程序通常,我们所说的翻译程序是指这样的一个程序,它能够把某一种语言...
  • C & C++的编译过程详解

    千次阅读 2013-12-15 21:26:11
    C/C++编译过程 C/C++编译过程主要分为4个过程 1) 编译预处理 2) 编译、优化阶段 3) 汇编过程 4) 链接程序 一、编译预处理 (1)宏定义指令,如#define Name TokenString,#undef等。 对于前一个伪指令...
  • 编译原理知识汇总

    千次阅读 多人点赞 2019-05-04 00:12:00
    编译原理 第一章 引言 ...1.从面向机器的语言到面向人类的语言 ...汇编指令:用符号表示的指令被称为汇编指令 ...转换(也被称为预处理):高级语言之间的翻译,如...编译:高级语言可以直接翻译成机器语言,也可以翻译...
  • C/C++的编译和链接过程

    千次阅读 2019-06-03 15:49:29
    配置属性的【c/c++】(设置编译的一些选项) 和 【链接器】选项页,最后的那个命令行汇总了所有生效的设置,就是最终执行的命令行 配置属性的VC++ 目录用于设置各个路径,相当于设置环境变量PATH(搜可执行...
  • verilog 综合注意事项

    万次阅读 多人点赞 2016-07-29 15:46:40
    11、敏感表:Always过程中,所有被读取的数据,即等号右边的变量都要应放在敏感表中,不然,综合时不能正确地映射到所用的门。 12、IF: 如果变量没有IF语句的每个分支中进行赋值,将会产生latch。如果IF语句...
  • Xcode 编译过程以及编译器

    千次阅读 2016-11-09 11:34:44
    基本的编译过程分为四个步骤: 预处理(Pre-process):把宏替换,删除注释,展开头文件,产生 .i 文件。 编译(Compliling):把之前的 .i 文件转换成汇编语言,产生 .s文件。 汇编(Asembly):把汇编...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,970
精华内容 20,788
关键字:

在以阶段划分的编译过程中