欢迎来到天天文库
浏览记录
ID:22090804
大小:113.50 KB
页数:30页
时间:2018-10-19
《编译原理与技术讲义-第1章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理与技术第1章概论青岛大学信息工程学院主要内容为什么学习编译什么叫编译程序编译过程概述编译程序的构成与编译有关的概念和技术如何开发编译程序编译系统以及其它相关程序编译原理与技术21.1为什么学习编译编译程序构造的原理和技术一直属于计算机科学必备的专业基础知识。是计算机科学中一个非常成功的分支,也是最早获得成功的分支之一。它所建立的理论、技术和方法值得深入研究和学习。编译构造正确地建立了研究的问题领域和研究方式。编译原理与技术31.1为什么学习编译针对编译程序构造的某些部分已经开发了标准的形式化技术,包括有限自动机理论
2、、上下文无关文法、正规表达式、属性文法、机器代码描述、数据流分析方程式等。编译程序包含许多普遍使用的数据结构和算法,例如散列法(哈希算法)、栈机制、堆机制、垃圾收集、集合算法、表驱动算法。编译程序的许多构造技术已经得到了广泛的应用。学习编译原理和技术还有助于我们理解程序设计语言,编写优秀的软件。编译原理与技术41.2什么叫编译程序概念翻译程序或翻译器是把一种语言(源语言)转换成等价的另外一种语言(目标语言)的程序。如果源语言是高级编程语言,目标语言是机器代码和汇编语言这样的低级语言,这类翻译程序就叫做编译程序或编译器。编译
3、原理与技术51.2什么叫编译程序编译执行方式:把源程序用编译程序翻译成机器可以执行的目标程序或目标代码,然后才能接受输入数据运行。编译程序源程序输入数据目标程序计算机系统目标程序运行结果编译原理与技术61.2什么叫编译程序解释程序:解释程序不产生源程序的目标代码,而是对源程序逐条语句的分析,根据每个语句的含义执行产生结果。解释程序输入数据源程序计算机系统运行结果编译原理与技术71.3编译过程概述词法分析词法分析的任务是逐步地扫描和分解构成源程序的字符串,识别出一个一个的单词符号或符号。编译程序的词法分析也叫词法扫描或线性扫
4、描。计算机高级语言的单词符号通常包括:标识符、关键字或基本字、标点符号、常数、运算符、分隔符等类型。编译原理与技术81.3编译过程概述符号类型while关键字(分隔符i标识符<运算符100整常数)分隔符sum标识符=运算符sum标识符i标识符+运算符;分隔符例子1.1:while(i<100)sum=sum+i词法分析的结果识别出的单词编译原理与技术91.3编译过程概述语法分析语法分析的任务是在词法分析基础上,根据语言的语法规则把单词符号串分解成各类语法单元(语法范畴、语法短语)例如“短语”、“子句”、“语句”、“程序段”
5、、“函数”和“程序”等。语法分析是把线形序列的单词符号,根据语言的语法规则,按照层次分解,结果通常表示成语法分析树。编译原理与技术101.3编译过程概述例子1.1while(i<100)sum=sum+i语法分析树while语句分隔符分隔符(分隔符)表达式表达式;表达式循环体语句运算符赋值表达式变量常量<100i变量表达式复合赋值运算符++sum+=运算符表达式变量i编译原理与技术111.3编译过程概述语义分析和中间代码生成语义分析的任务是检查程序语义的正确性,解释程序结构的含义。检查变量是否有定义,变量在使用前是否具有值
6、,数值是否溢出等,其中的一个重要部分是进行类型的检查和转换。语义分析完成之后,编译程序通常就依据语言的语义规则、利用语法制导技术把源程序翻译成某种中间代码。编译原理与技术121.3编译过程概述中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序。其中一类是三地址代码,很象机器的汇编语言Lbegin:ifi<100gotoLbodygotoLendLbody:t1:=sum+isum:=t1t2:=i+1i:=t2gotoLbeginLend:编译原理与技术131.3编译过程概述中间代码优
7、化主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码。Lbegin:ifi<100gotoLbodygotoLendLbody:sum:=sum+ii:=i+1gotoLbeginLend:编译原理与技术141.3编译过程概述目标代码生成目标代码生成的主要任务是把(经过优化处理的)中间代码翻译成特定的机器指令或汇编程序。这个阶段的工作依赖于计算机的硬件结构和指令系统,主要涉及到机器指令的选择、各种类型变量存储空间的分配,以及寄存器的分配和调度,等等。编译原理与技术151.3编译过程概述目标代码
8、生成MOV#100,R0//把常数100存入寄存器R0MOVi,R1//把变量i的值存入寄存器R1MOVsum,R2//把变量m的值存入寄存器R2Lbegin:CMPR1,R0//比较R1和R0的值,结果存入状态寄存器CTJLend//状态寄存器CT=1或2,即R1R0,程序转入单元LendADDR
此文档下载收益归作者所有