- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理;本课程的地位;学习任务;教材;第1章 编译程序概论;基本概念
机器语言:计算机唯一能够识别和执行 的语言。
汇编语言:用助记符代替机器语言二进制编码的语言。如ADD表示加法操作,SUB表示减法操作等等
高级语言:使用便于理解的自然语言。
;语言处理程序;编译程序(器):接受某种语言的源语言程序后,将它改造成另一种逻辑上等价的目标语言程序。 ;图3源程序的编译、汇编和运行阶段;编译程序vs解释程序;把英文I am a university student翻译为中文
识别出句子中的一个个单词;
分析句子的语法结构;
根据句子的含义进行初步翻译;
对译文进行修饰;
写出最后的译文。
;表 格 管 理;词法分析;例: A:=B+x*60;;语法分析;语句的表示:
标识符:=表达式 是语句。
while (表达式) do 语句
if (表达式) then 语句 else 语句
;语义分析的功能是审查源程序有无语义错误,为代码生成阶段收集类型信息。
语义分析主要能识别的语义错误有:变量没有声明就使用,变量重复声明,运算对象类型是否匹配等等。
依据:语义规则。;中间代码生成;如:源程序 A:= x + y * 10
生成的四元式可以是:
( inttoreal, 10, -, t1 )
( *, y, t1, t2 )
( +, x, t2, t3 )
( :=, t3, -, A );代码优化;目标代码生成;( *, y, 10.0, t1 )
( +, x, t1, A );符号表用来记录源程序中出现的标识符,并收集每个标识符的各种属性信息。
符号表是由若干记录组成的数据结构,每个标识符在表中有一条记录,每条记录有多个域,每个域记载标识符的一个属性。;图 编译程序结构示意 ;有关名词:
前端(front end):主要依赖于源语言而与目标机器无关的编译阶段。如:词法分析、语法分析、语义分析、中间代码生成、部分优化工作、与前端有关的出错处理工作和符号表管理工作。
后端(back end):依赖于目标机而一般不依赖于源语言,只与中间代码有关的编译阶段。如:目标代码生成,以及相关出错处理和符号表操作。
遍(趟):对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。每一遍扫视可完成上述一个阶段或多个阶段的工作。; 1.自编译
用某种高级语言书写自己的编译程序称为自编译。
例如,假定A机器上已有一个PASCAL语言可以运行,则可以用PASCAL语言编写出一个功能更强的PASCAL语言编译程序,然后借助于原有的PASCAL编译程序对新编写的PASCAL编译程序进行编译,从而在编译后即得到一个能在A机器上运行的功能更强的PASCAL编译程序。
; 2.交叉编译
交叉编译是指用A机器上的编译程序来产生可在B机器上运行的目标代码。
例如,若A机器上已有C语言可以运行,则可用A机器中的C语言书写一个编译程序,它的源程序是C语言程序,而产生的目标程序则是基于B机器的,即能够在B机器上执行的低级语言程序。
; 3.自展
自展的方法是:首先确定一个非常简单的核心语言L0,然后用机器语言或汇编语言书写出它的编译程序T0;再把语言L0扩充到L1,此时有L0 L1,并用L0编写L1的编译程序T1(即自编译);然后再把语言L1扩充为L2,此时有L1 L2,并用L1编写L2的编译程序T2;…… 这样不断扩展下去,直到完成所要求的编译程序为止。 ;4.移植
移植是指A机器上的某种高级语言的编译程序稍加改动后能够在B机器上运行。
一个程序若能较容易地从A机器上搬到B机器上运行,则称该程序是可移植的???移植具有一定的局限性。
;构造编译程序的前提:
掌握源语言
掌握目标语言
掌握编译方法
文档评论(0)