编译程序的构造
13.3 GCC的剖析
一.GCC的总体结构 ❖编译器的工作是将源代码(通常使用高级语言编写)翻译成
目标代码(通常是低级的目标代码或者机器语言),在现代 编译器的实现中,这个工作一般是分两个阶段来实现的: ➢第一阶段,编译器的前端接受输入的源代码,经过词法、 语法和语义分析等等得到源程序的某种中间表示方式 ➢第二阶段,编译器的后端将前端处理生成的中间表示方式 进行一些优化,并最终生成在目标机器上可运行的代码
1、中间表示技术 ❖中间表示是在编译程序将高级语言程序翻译为汇编语言或
机器代码的过程中产生的。 ❖在可重定向编译程序的研究中,应提供一种结构良好的中
间表示,这种中间表示应在适当的抽象层次上,向上能支 持多语言的映射,向下能适应多平台转换且宜于进行各种 优化。 2、机器描述技术 ❖研究表明,基于体系结构描述语言详细地指定体系结构是 产生高质量机器级工具的关键技术。
➢第一步:先用A机器的汇编语言或机器语言A书写L1的编 译程序,表示为CAL1A,其T型图如图13.3所示:
➢第二步:再用L1书写L语言的编译程序为CL1LA,其T型图 如图13.4所示
➢第三步:由于最终要求得到CALA,只要把CL1LA经过CAL1A 即可得到CALA。可用图13.5的双层结合T型图表示:
两者的主要区别 ➢在前端和后端的数量上:GCC支持C、C++、Java等7种
源语言和MIPS、ARM等36种体系结构系列。LCC源语言 只支持标准C,后端支持ALPHA、MIPS R3000、 SPARC和x86 ➢在机器描述的能力上:GCC所描述的处理器信息较多,强 于LCC。 ➢在产生代码质量上:GCC经过20~30多遍的优化,大量测 试表明代码的稳定性较好。LCC经过少量的优化,代码质 量也比较可靠。 ➢GCC逐渐成为工业上的主流应用,LCC应用较少,且有被 GCC取代的趋势。
➢GCC是FSF启动的GNU工程的一部分,其开发目标在于提
高GNU系统中编译程序的质量。
➢GCC目前已支持的源语言有:C、C++、Objective_C、JAVA 、Ada,已移植的平台有100多种,涉及30多种处理器、60多种系 统。
2、LCC是由普林斯顿大学的Christopher Fraser和David Hanson开发的可重定向的ANSI C编译程序,可供匿名使用。
3、代码生成程序的构造技术 ❖一般来说,代码生成程序的构造器的输入是机器描述,输
出是代码生成程序。 4、目标机描述与目标代码生成的接口技术 ❖目标机描述与目标代码生成的接口,指定了与目标机无关
的前端及与目标机有关的后端之间的相互联系。
三、常用的可重定向编译程序
1、目前在世界范围内得到广泛使用的可重定向编译程序是属于 自由软件的GCC(GNU compiler collection:/)
一、概述 ❖可重定向编译程序的研究和开发对于编译程序的构造具有 重大意义:
➢1、它缩短了编译程序的开发周期。 ➢2、它提高了编译程序研究的质量,使研究人员能够在抽象 级的平台上开发,把精力专注于研究本身而非基础建设。 ➢3、便于更多的队伍从事编译程序研究,且其研究成果能够 被很好地共享,从而可以加快步伐。
二.编译程序的自展技术 ❖自展思想:先用目标机的汇编语言或机器语言书写源语言
的一个子集的编译程序,然后再用这个子集作为书写语言, 实现源语言的编译程序。如果把这个过程根据情况分成若 干步,像滚雪球一样直到生成预计源语言的编译程序为止, 把这样的实现方式称为自展技术
❖例如,在目标机A上要实现L语言的编译程序,可以把L的 核心部分划分为L1
❖L可以分成核心L1,L2,…,Ln都为L1的逐步扩充,使得 L=Ln,其自展的示意图如图13.7所示:
三、交叉编译程序 ❖交叉编译:在一个平台上生成另一个平台上的可执行代码。 ❖平台:指体系结构、操作系统。 ❖需要它的原因: ➢1、目标平台上不允许或不能够安装所需要的编译程序,而又
需要这个编译程序的某些特征。 ➢2、目标平台上的资源贫乏,无法运行所需要的编译程序。 ➢3、目标平台还没有建立,没有操作系统,根本上谈不上运行
五、可重定向编译程序 ❖它能根据不同目标机,生成相应的目标代码,而普通编译程
序将源程序翻译成特定目标机的汇编代码或目标代码。 (1)可重定向编译程序不是针对特定机器的编译程序用户
而言的可重定向。 (2)可重定向编译程序不是编译程序的生成器。 (3)有多个针对不同机型的可选后端。
13.2 可重定向编译程序
A
❖结合T型图的原则是: (1)下面的T型图的左右上角两个语言分别与上面左右两个 T型图的底部语言相同 (2)上面左右两个T型图的左右上角的语言必须分别相同
❖如果把L分出L1,L2,这个过程用三层结合的T型图表示 如图13.6所示:
A
➢CALA CLL1Aபைடு நூலகம்
CL1L2A
CL2LA
CAL2A
CALA
➢4、及时针对新机器和新语言开发出配套的编译程序,减少 了采用新语言和新机器的障碍,有利于为产品创造更大的市 场。
二、支持可重定向编译的关键技术 ❖可重定向编译程序的目的是为了实现资源共享,方便于特
定目标机的编译程序的剪裁和移植,因此,传统的多目标 编译后端构造,中间表示、代码优化和代码生成等编译技 术,应该为可重定向编译程序的开发提供依据。
什么编译程序。 特点:与主机编译相比,交叉编译受到的限制更多:专利、版权、 技术。
四、编译基础设施 ❖编译基础设施是编译程序的开发环境,它提供一系列开发
编译程序的策略和工具,支持多种源语言、多目标机的编 译技术,以便于人们在具有较高抽象层次的平台上进行编 译程序开发和研究工作。
❖编译基础设施为开发各种编译程序成分提供相应的生成工 具。
13.1 编译程序的书写
❖ 编译程序的构造主要有三条途径: ➢用某种程序语言书写编译程序 ➢通过LEX、YACC等工具进行自动构造 ➢通过现有的编译基础设施进行改造和组装
一.编译程序的书写语言与T型图 ❖编译程序的T型图,如图13.1所示:
❖ 如果一个编译程序的源语言是X,目标语言是Y,书写语 言是Z,把该编译程序记作CZXY,那么用T型图表示如图 13.2所示:
编译原理答疑题
编译原理答疑题1.编译程序的结构是什么?答:编译过程的六个阶段的任务,再加上表格管理和出错处理的工作可分别由几个模块或程序完成,它们分别称作词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格管理程序和出错处理程序。
2.PL/0编译程序的结构是什么?答:由PL/0的EBNF可知,PL/0语言可看成是PASCAL语言的子集,它的编译程序是一个编译解释执行系统。
PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。
PL/0的编译程序和目标程序的解释执行程序都是用PASCAL语言书写的,因此PL/0语言可在配备PASCAL语言的任何机器上实现。
其编译过程采用一趟扫描方式,以语法分析程序为核心,词法分析程序和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就调用词法分析程序,而当语法分析正确需生成相应的目标代码时,则调用代码生成程序。
此外,用表格管理程序建立变量、常量和过程标识符的说明与引用之间的信息联系。
用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质。
当源程序编译正确时,PL/0编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序要求输入数据和输出运行结果。
3.关系有哪些基本性质?答:自反的在集合X上的关系R,如对任意x∈X,均有(x,x) ∈R,则称关系R是自反的。
非自反的在集合X上的关系R,如对任意x∈X,均有(x,x)R,则称关系R是非自反。
对称的在集合X上的关系R,如果合(x,y) ∈R,便必有(y,x) ∈R,则称关系R 是对称的。
非对称的在集合X上的关系R,如果有(x,y) ∈R丛x≠y,便必有(y,x)R,则称关系R是非对称的。
传递的在集合X上的关系R,如果合(x,y) ∈R且(y,z) ∈R,必有(x,z) ∈R,则称关系R是传递的。
4.设有文法G[I]:I->I1/I0/Ia/Ic/a/b/c判断下面符号串中哪些是该文法的句子.(1) ab0(2)a0c01(3)aaa(4)bc10(5)aabc(6)bbca答:(1)错误(2)正确(3)正确(4)正确(5)错误(6)错误(7)错误5. 给定文法G =(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树(推导树)。
编译原理及编译程序构造
第一章 引论 一、程序设计语言
•程序设计语言 –高级语言 –汇编语言 –机器语言 •在计算机上如何执行一个高级语言程序? –把高级语言程序翻译成机器语言程序 –运行所得的机器语言程序求得计算结果
第一章 引论 二、程序设计语言的转换与编译
•翻译 –在不改变语义的条件下,把某种语言的源程序 转换成另一种语言程序——目标语言程序。 •解释 –接受某高级语言的一个语句输入,进行解释并 控制计算机执行,马上得到这句的执行结果,然 后再接受下一句。
第一章 引论 三、编译程序 4.优化
• 任务 对产生的中间代码进行加工变换,以期在最 后阶段能产生更为高效(省时间、省空间)的 目标代码 • 依据原则:程序的等价变换规则 • 主要优化内容 删除公共子表达式、合并已知量、删除无用 赋值语句、循环优化等
第一章 引论 三、编译程序 5.目标代码生成
• 任务:把中间代码程序转化成具体机器的指令序列 • 注:转换过程需涉及具体机器的指令系统以及寄存 器分配等硬件功能。
第一章 引论 三、编译程序 8. 遍
• 遍:指对源程序或源程序的中间结果从头到尾扫描一次, 并做有关的加工处理,生成新的中间结果或目标代码的过 程。 –注:遍与阶段的含义毫无关系。 • 多遍扫描的好处 –节省内存空间,提高目标代码质量,使编译的逻辑结构 清晰。 • 多遍扫描的缺点 –编译时间较长。 –注:在内存许可情况下,还是遍数尽可能少些为好。
词 源程序 法 分 析 器
语 法 代 码 生 成
优 化
目 标 代 目标代码 码 生 成
出错处理
第一章 引论 三、编译程序 1.词法分析
• 任务 –输入源程序,对构成源程序的字符串进行扫 描和分解,依照词法规则,识别出一个个的 单词,并转化为机器易于使用的内码形式。 • 单词 –是高级语言中有实在意义的最小语法单位, 它由字符构成。
编译程序构造原理和实现技术
编译程序构造原理和实现技术1.什么是编译程序编译程序是一种将源代码翻译成目标代码的程序。
编译程序的主要目的是将源代码转换成机器可以执行的指令,这样计算机就能够正确地执行源代码的功能。
编译程序的工作过程一般包括词法分析、语法分析、语义分析、代码生成和代码优化等几个阶段。
2.编译程序构造原理编译程序的构造原理主要涉及到编译原理、计算机组成原理和数据结构等学科的知识。
在编译程序的构造中,最关键的是语法分析和代码生成。
2.1语法分析语法分析就是对源代码进行词法分析、语法分析和语义分析等处理,将源代码转换成语法树或抽象语法树。
语法树可以帮助编译器识别代码的结构,为后面的代码生成提供有用的信息。
在语法分析中,编译器需要实现一些类似递归下降分析和LR分析的算法,以实现对源代码的解析。
语法树和抽象语法树还可以用来进行代码调试和优化。
2.2代码生成代码生成是将语法树或抽象语法树转换成目标代码的过程。
在这个过程中,编译器需要实现目标代码的生成和优化。
目标代码生成的具体方式取决于编译器的实现以及编译器的目标平台。
3.实现编译程序的技术在实现编译程序时,需要借助一些工具和技术。
下面介绍一些常用的编译程序实现技术。
3.1词法分析器和解析器生成器词法分析器和解析器生成器是实现编译器的重要工具。
它们通常可以根据语法规则自动生成针对特定语言的词法分析器和解析器,这极大地简化了编译器的实现和维护。
在词法分析和解析器生成器中,Flex和Bison是两个常用的工具。
其中Flex是一个用来生成词法分析器的工具,而Bison是一个用来生成解析器的工具。
3.2代码生成器代码生成器是实现编译器的另一个重要工具。
在代码生成器中,通常会实现许多针对不同目标平台的编译器前端,以帮助开发人员快速生成高效的目标代码。
在代码生成器中,常用的工具有LLVM和GCC等。
其中LLVM是一个开源的编译器框架,支持多种语言,可以用来构建可扩展的编译器前端和后端。
编译原理及编译程序构造-部分课后与答案
编译原理及编译程序构造-部分课后与答案(总30页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March第一章练习12、典型的编译程序可划分为哪几个主要的逻辑部分各部分的主要功能是什么典型的编译程序具有7个逻辑部分:第二章练习4.试证明:A+ =AA*=A*A证:∵ A*=A0∪A+,A+=A1∪A2∪…∪An∪…得:A*=A0∪A1∪A2∪…∪An∪…∴ AA*=A(A0∪A1∪A2∪…∪An∪…)= AA0∪AA1∪AA2∪…∪A An∪…=A∪A2∪A3∪An +1∪…= A+同理可得:A*A =(A0∪A1∪A2∪…∪An∪…)A=A0 A∪A1A∪A2A∪…∪AnA∪…= A∪A2∪A3∪An+1∪…= A+因此: A+ =AA*=A*A练习1.设G[〈标识符〉]的规则是:〈标识符〉::=a|b|c|〈标识符〉a|〈标识符〉c|〈标识符〉0|〈标识符〉1试写出VT和VN,并对下列符号串a,ab0,a0c01,0a,11,aaa给出可能的一些推导。
解:VT ={a,b,c,0,1}, VN ={〈标识符〉}(1) 不能推导出ab0,11,0a(2)〈标识符〉=>a(3)〈标识符〉=>〈标识符〉1=>〈标识符〉01=>〈标识符〉c01=>〈标识符〉0c01=> a0c01(4)〈标识符〉=>〈标识符〉a=>〈标识符〉aa=>aaa2.写一文法,其语言是偶整数的集合解:G[<偶整数>]:<偶整数>::= <符号> <偶数字>| <符号><数字串><偶数字> <符号> ::= + | — |ε<数字串>::= <数字串><数字>|<数字><数字> ::= <偶数字>| 1 | 3 | 5 | 7 | 9<偶数字> ::=0 | 2 | 4 | 6 | 84. 设文法G的规则是:〈A〉::=b<A>| cc试证明:cc, bcc, bbcc, bbbcc∈L[G]证:(1)〈A〉=>cc(2)〈A〉=>b〈A〉=>bcc(3)〈A〉=>b〈A〉=>bb〈A〉=>bbcc(4)〈A〉=>b〈A〉=>bb〈A〉=>bbb〈A〉=>bbbcc又∵cc, bcc, bbcc, bbbcc∈Vt*∴由语言定义,cc, bcc, bbcc, bbbcc∈L[G]5 试对如下语言构造相应文法:(1){ a(bn)a | n=0,1,2,3,……},其中左右圆括号为终结符。
程序编译的四个步骤
程序编译的四个步骤程序编译是将高级语言编写的程序翻译成机器语言的过程。
编译器是用来进行编译的工具,它可以将源代码转换为可执行的机器码,从而能够被计算机直接执行。
程序编译通常包括四个主要步骤:词法分析、语法分析、语义分析和代码生成。
1.词法分析词法分析是程序编译的第一步,也是一个很关键的步骤。
在词法分析中,编译器会将源代码分解为一个个的词法单元。
词法单元是程序的最小语法单位,可以是关键字、标识符、运算符、常量等等。
编译器会根据事先定义好的语法规则,将源代码中的字符序列解析成词法单元序列,并且给每个词法单元加上相应的标记,以便后面的步骤进行处理。
2.语法分析语法分析是程序编译的第二步。
在语法分析中,编译器会根据词法分析得到的词法单元序列,构建语法树或抽象语法树。
语法树是一个树状的数据结构,它表示程序的语法结构。
编译器会根据文法规则和词法单元的组合规则,对词法单元序列进行检查,并将其组织成语法树或抽象语法树。
语法树或抽象语法树是编译器进行后续处理的基础,它描述了程序的语法结构,方便后续步骤对程序进行分析和优化。
3.语义分析语义分析是程序编译的第三步。
在语义分析中,编译器会对语法树或抽象语法树进行分析,进行语义检查和语义推导。
语义是指程序中传达的意义和规则,它描述了程序如何运行和产生结果。
编译器会根据语义规则检查程序是否存在语义错误,并进行类型检查和类型推导。
如果程序存在语义错误,则编译器会输出错误信息,提示开发人员进行修正。
另外,编译器还会进行一些语义转换和优化,例如将高级语言中的循环结构转换为汇编语言中的跳转指令。
4.代码生成代码生成是程序编译的最后一步。
在代码生成中,编译器会根据语义分析得到的语法树或抽象语法树,生成目标代码或机器代码。
目标代码是特定平台上的中间代码表示,它与具体的机器相关性较低。
机器代码是目标机器上可以直接执行的二进制代码。
编译器会将目标代码或机器代码生成为对应的输出文件,例如可执行文件、动态链接库或静态链接库。
程序编译的四个步骤
程序编译的四个步骤程序编译通常涉及以下四个步骤:预处理、编译、汇编和链接。
1.预处理预处理是编译过程的第一步,它主要负责对源代码进行一些预处理操作。
预处理器工具通常被称为预处理程序,它会根据源代码文件中的预处理指令来修改源代码。
预处理指令位于源代码文件的开头,以“#”字符开头。
预处理指令主要包括宏定义、条件编译和包含文件等。
在预处理阶段,预处理器会执行以下操作:-展开宏定义:将代码中的宏定义替换为相应的代码片段。
-处理条件编译:根据条件编译指令的结果,决定是否包含或排除一些代码。
-处理包含文件:将文件中的包含文件指令替换为实际的文件内容。
预处理后的源代码通常会生成一个中间文件,供下一步编译使用。
2.编译编译是程序编译过程的第二个阶段。
在编译阶段,编译器将预处理生成的中间文件翻译成汇编语言。
编译器会按照源代码的语法规则,将源代码转换为汇编语言指令,生成目标文件(也称为汇编代码文件)。
编译器在编译过程中执行以下操作:-词法分析:将源代码分割为多个词法单元,如关键字、标识符和运算符等。
-语法分析:根据语言的语法规则,分析词法单元的组合,生成语法树。
-语义分析:检查语法树的语义正确性,进行类型检查等。
-优化:对生成的中间代码进行各种优化,以提高程序执行效率。
编译器输出的目标文件通常是汇编语言形式的代码,以便下一步汇编使用。
3.汇编汇编是编译过程的第三个阶段,它将编译器生成的汇编代码翻译成目标机器码。
汇编器(或称为汇编程序)将汇编代码中的指令和操作数翻译为目标机器指令的二进制表示。
汇编器在汇编过程中执行以下操作:-识别和解析汇编指令:将汇编代码中的汇编指令和操作数分割解析。
-确定存储器地址:根据符号的引用和定义,计算并分配存储器地址。
-生成目标机器指令:将汇编指令和操作数翻译为目标机器指令的二进制表示。
汇编器的输出是一个或多个目标文件,每个目标文件都包含可在目标机器上执行的二进制指令。
4.链接链接是编译的最后一个阶段,它将多个目标文件和库文件组合在一起,生成最终的可执行文件。
《编译原理》第十三章习题答案
答案: 编译程序的实现 应考虑:开发周期、目标程序的效率、可移植性、可调试性、可维护
性、可扩充性等。
盛威网()专业的计算机学习网站
3
C2,然后分 3 步实现。
盛威网()专业的计算机学习网站
问题 3: 什么叫做软件移植?
答案: 通常把某个机器(称为宿主机)上已有的软件移植到另一台机器(称为目标机)
问题 4: 什么叫做交叉编译?
答案: 交叉编译是指把一个源语言在宿主机上经过编译产生目标机的汇编语言或机器语言。
盛威网()专业的计算机学习网站
1
《编译原理》课后习题答案第十三章
附加题
问题 1: 如何用 T 型图 表示一个编译程序的实现?
答案: 用 T 型图 表示编译程序的实现
问题 2: 如何用自展方式在 PC 机上实现 C 语言的编译程序?请用 T 型图 表示。
答案: 用自展方式在 PC 机上实现 C 语言的编译程序,首先把 C 划分成真包含的子集 C1 和
编译原理第十三章习题答案编译原理课后习题答案编译原理习题答案编译原理第六章答案编译原理第七章答案编译原理第四章答案编译原理第三章答案编译原理第五章答案编译原理复习题编译原理习题
《编译原理》课后习题答案第十三章
第 13 章 编译程序的构造
第1题 构造一个编译程序有哪些途径?
答案:
编译程序的实现途径可有: (1)手工构造:用机器语言、汇编语言或高级程序设计语言书写。 (2)自动构造工具:Lex,Yacc。 Lex ,Yacc 分别是词法和语法分析器的生成器。 (3)移植方式:目标程序用中间语言。 (4)自展方式:用 T 型图表示。
计算机编译程序构造与实践
术语: 汇编程序:把汇编语言程序翻译成 等价的机器语言程序 编译程序:把高级语言程序翻译成 等价的低级语言程序
源程序
目标程序
源语言
目标语言
运行子程序
源程序
编译程序
目标程序
输入数据
目标程序 运行子程序
输出结果
编译原理课程基本内容 • 高级程序设计语言是一种符号语言 编译程序是符号处理的工具 • 编译原理讨论: 编译程序构造的基本原理、技术和方法 • 三个方面 ·高级程序设计语言的定义和相关概念 ·与编译实现相关的形式语言理论基本概念 ·编译程序构造的原理、技术和方法
程序设计语言描述 print ("Input values of a, b and c"); read (a ); read (b ); read (c ); sum=a+b+c; print("sum=", sum);
C语言描述 printf(" … "); scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); sum=a+b+c; print("sum=", sum);
计算机编译原理
编译程序构造与实践
第一章 概述 1.1 编译程序的引进
1.1.1 高级程序设计语言与程序
程序是什么?
程序设计语言是什么?
程序的概念 程序:要求依序执行的一系列工作。
英语描述 Please input values of a,b and c. Type a value for a. Type a value for b. Type a value for c. Find the sum of a, b and c. Output the value of the sum. 中文描述 请输入a,b和c的值。 输入一值作为a的值。 输入一值作为b的值。 输入一值作为c的值。 求a, b和c之和的值。 输出该和的值。
编译原理基础
第一章引论主要内容:编译原理的基本概念、定义、编译原理的应用发展和现状。
重点:编译程序工作的基本构成及各阶段的基本任务,具体要求:理解什么是编译程序,了解各编译程序的基本构成及各阶段的基本任务,编译程序总框,了解编译程序生成过程和构造工具。
一、名词解释1、编译程序:能够把用各种高级语言书写的源程序翻译成某种等价的目标程序的翻译程序。
2、遍:指编译程序对源程序或中间代码程序从头到尾扫描一次。
3、静态分配:在编译时就能够安排好目标程序运行时的全部数据空间。
二、问答题1、简述编译程序的结构?答:编译程序包括词法分析、语法分析、中间代码生成、优化,目标代码产生五个阶段,上述各阶段中还要进行表格处理和出错处理的工作。
2、编译程序可分成哪几个阶段?它们之间的关系如何?答:编译程序可分为五个阶段:词法分析、语法分析、中间代码生成、优化、目标代码生成。
上述五个阶段之间每个阶段输出为作下一阶段的输入,第一阶段的输入是源程序,最后阶段的输出是目标代码程序。
注意:编译过程中,阶段的划分和遍的划分不一定相同第二章高级程序语言概述主要内容:程序语言定义、初等数据类型、数据结构、表达式、语句、高级语言的一般特征及程序语言的语法描述。
重点:程序语言定义具体要求:理解程序语言的词法、语法和语义等概念;熟悉高级程序语言的一般结构和主要共同特征。
一、填空题1、程序语言是由(语法)和(语义)两方面定义的。
2、一个名字的属性包括(类型)和(作用域)3、目标代码一般有三种形式:能够立即执行的机器语言代码,(待装配的机器语言模块)和(汇编语言代码)4、语义:定义一个程序的意义的(一组规则)5、2型文法又称为(上下文无关文法),3型文法又为(正规文法)二、是非题1、虽然名字都是用标识符表示的,但名字和标识符有着本质的区别(对)2、各种名字都是用标识符表示的,所以名字和标识没有本质的区别(错)3、数组元素的地址计算与数组的存储方式没有关系(错)4、语法是指程序的含义(错)5、因名字都是用标识符表示的,故名字与标识符没有区别(错)第三章词法分析主要内容:词法分析器的任务、词法分析器的设计、正规表达式与有限自动机、词法分析器的自动生成。
程序设计语言编译程序构造的基本原理和基本实现技术概要
集成化的程序设计环境
五.编译程序生成
以汇编语言和机器语言为工具
优点:
可以针对具体的机器,充分发挥计 算机的系统功能。生成的程序效率高。 缺点: 程序难读、难写、易出错、难维护、 生产的效率低。
五.编译程序生成
高级语言书写
S I S 源程序
T I 实现语言
T 目标程序
优点: 程序易读、易理解、容易维护、 生产的效率高。 缺点: 难以充分发挥计算机的系统功能, 生成的程序效率低。
PROCEDURE INCWAP(M,N:INTEGER); LABEL START; VAR K:INTEGER; BEGIN START: K:=M+1; 表 0.1 符号名表 SNT M:=N+4; NAME INFORMATION N:=K; END. M 形式参数,整 型,值参数 N 形式参数,整 型,值参数 K 整型,变量
NAME INFORMATION (1) INCWAP 二目子程序, 入口四元式:1
PROCEDURE INCWAP(M,N:INTEGER); LABEL START; VAR K:INTEGER; BEGIN START: K:=M+1; M:=N+4; N:=K; 表 0.4 标号表 LT END. NAME INFORMATION (1) START 四元式:(4)
写出最后的译文。
二.
编译过程
编译程序的工作一般分为五个阶段:
词法分析 语法分析 中间代码产生 优化
目标代码产生
1. 词法分析
任务: 输入源程序,对构成源程序的字 符串进行扫描和分解,识别出一个个单 词符号。 依循的原则:构词规则 描述工具:有限自动机 FOR I := 1 TO 100 DO
