资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,Click to edit Master title style,Click to edit Master text styles,Second Level,Third Level,Fourth Level,Fifth Level,*,*,*,*,Click to edit Master title style,Click to edit Master text styles,Second Level,Third Level,Fourth Level,Fifth Level,*,*,编 译 原 理,赵东明,第一页,编辑于星期五:二十一点 十四分。,课程目标,掌握高级,语言,的,编译原理和方法,第二页,编辑于星期五:二十一点 十四分。,第一章 引 论,什么是编译程序,编译过程概述,编译程序的结构,编译程序与程序设计环境,编译程序的生成,第三页,编辑于星期五:二十一点 十四分。,1.1 什么叫编译程序,计算机是如何实现用户的计算需求?,第四页,编辑于星期五:二十一点 十四分。,1.1 什么叫编译程序,大多数用户是利用,高级语言,为工具编程来实现需求的,第五页,编辑于星期五:二十一点 十四分。,1.1 什么叫编译程序,为什么不能执行源程序 test.c?,必须翻译成机器语言程序test.exe,第六页,编辑于星期五:二十一点 十四分。,1.1 什么叫编译程序,计算机如何执行高级语言程序?,实现用户的计算需求,高级语言的作用?,首先将高级语言程序,翻译,为机器语言程序,然后,运行,机器语言程序求得计算结果,第七页,编辑于星期五:二十一点 十四分。,翻译程序,高级语言程序,低级语言程序,将一种语言程序转换成逻辑上等价的另一种语言程序,编译程序,(,C、C+,)(汇编、机器语言),解释程序,以源程序作为输入,边解释边执行源程序本身,并不产生目标程序。,源,目标,第八页,编辑于星期五:二十一点 十四分。,编译程序的分类,诊断编译程序,Diagnostic Compiler,(方便调试),优化编译程序,Optimizing Compiler,(提高目标代码效率),交叉编译程序,Cross Compiler,(宿主机与目标机不同),可变目标编译程序,Retargetable Compiler,(便于移植),第九页,编辑于星期五:二十一点 十四分。,编译程序的发展史,Compiler是随着高级语言的发展而发展的。,第一个编译程序是,FORTRAN,编译程序,Algol 60,语言,是计算机语言的研究成为一门科学的标志。,第十页,编辑于星期五:二十一点 十四分。,1.2 编译过程概述,编译程序的工作过程:,源程序 目标程序,*.C,*.exe,编译程序,Turbo C,例如,第十一页,编辑于星期五:二十一点 十四分。,例如:,英文句子,中文句子,His words came out in qiack succession.,(1)词法分析,识别出一个个单词,并指出单词错误。,quick,(2)语法分析:,各类语法范畴。,主语:,His words,谓语:,came out,状语:,in quick succession,(3)初步翻译:,他的话用快的连续的方式说出来。,(4)优化:,in quick succession,机关枪似的。,(5)译文:,他说话像机关枪似的,。,第十二页,编辑于星期五:二十一点 十四分。,1.2 编译过程概述,编译程序的五个阶段:,词法分析,语法分析,语义分析与中间代码产生,优化,目标代码生成,第十三页,编辑于星期五:二十一点 十四分。,例如,:,for (i=1;i=N;i+),基本字,for,标识符,i,N,常 数,1,界 符,();,运算符,=+,词法分析,任务,:,输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词(或符号)。,(线性分析),描述词法规则的工具,正则式、有限自动机、正规文法,第十四页,编辑于星期五:二十一点 十四分。,语法分析,任务,:,在词法分析的基础上,根据语言的语法规则,把单词串分解成各类语法单位(语法范畴)。,描述语法规则的工具,:,上下文无关文法,例如,:,z=x+0.618*y ;,第十五页,编辑于星期五:二十一点 十四分。,语义分析与中间代码产生,任务,:,对各类语法范畴,分析其含义,并进行初步翻译、产生中间代码。,描述语义规则的工具,:,属性文法,(,2)中间代码的翻译,(独立于具体硬件、且含义明确的记号系统),(1)静态语义检查,(变量是否定义、类型是否正确),第十六页,编辑于星期五:二十一点 十四分。,举例:,Z:=X+0.618*Y;,序号,算符,左操作数,右操作数,结果,(1),*,0.618,Y,T1,(2),+,X,T1,T2,(3),:=,T2,Z,对应的中间代码形式,(四元式):,第十七页,编辑于星期五:二十一点 十四分。,优化,任务,:,对前段产生的中间代码进行加工变换,力求在最后阶段能产生出更高效的目标代码。,优化的原则,:,程序的等价变换规则,第十八页,编辑于星期五:二十一点 十四分。,举例,for(k=1;k,k,100,(9),(3),*,10,k,T1,(4),+,a,T1,m,(5),*,10,k,T2,(6),-,b,T2,n,(7),+,k,1,K,(8),j,(2),(9),中间代码:,第十九页,编辑于星期五:二十一点 十四分。,序号,算符,左操作数,右操作数,结果,(1),:=,a,m,(2),:=,b,n,(3),:=,1,K,(4),j,k,100,(9),(5),+,m,10,m,(6),-,n,10,n,(7),+,k,1,K,(8),j,(4),(9),优化后的中间代码:,第二十页,编辑于星期五:二十一点 十四分。,目标代码生成,任务,:,把中间代码变换成依赖于特定机器上的低级语言代码。,目标代码的三种形式,:,(1)绝对指令代码,(2)汇编指令代码,(3)可重定位的指令代码,第二十一页,编辑于星期五:二十一点 十四分。,1.3 编译过程的结构,词法分析器,语法分析器,语义分析与中间代码产生器,优化器,目标代码生成器,出 错 处 理,表 格 管 理,源程序,单词符号,语法单位,中间代码,中间代码,目标代码,第二十二页,编辑于星期五:二十一点 十四分。,遍(pass,),对源程序或源程序的中间结果从头至尾扫描一次,并做有关的加工处理技术,并生成新的中间结果或目标程序。,编译前端:,与源语言有关,与目标机无关的部分。,(词法分析、语法分析、语义分析与,中间代码生成、优化 ),编译后端:,与源语言无关,与目标机有关的部分。,(优化、目标代码生成),第二十三页,编辑于星期五:二十一点 十四分。,1.4 编译程序与程序设计环境,编辑程序(智能提示、词法查错),编译程序,连接程序,调试工具,配置管理程序,控制流分析工具,第二十四页,编辑于星期五:二十一点 十四分。,1.5 编译程序的生成,机器/汇编语言直接编写,在现有编译器基础上用高级语言编写,先实现语言的内核编译,再进行自编译扩展,先实现某语言的编译,再用该语言实现另一语言的编译,即编译编译程序,利用编译程序产生器输入源语言和目标语言的形式描述而,自动产生,编译程序,第二十五页,编辑于星期五:二十一点 十四分。,作业(1),一、术语解释,翻译程序 编译程序 解释程序,遍 编译前端 编译后端,二、简答:,1.编译程序分为哪几个阶段?各阶段的任务是什么?,2.描述词法规则、语法规则和语义规则的工具是什么?,3.画出编译程序的结构框图。,第二十六页,编辑于星期五:二十一点 十四分。,
展开阅读全文