编译原理-第一章.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:43 大小:1.2MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

编译原理-第一章.ppt

编译原理-第一章.ppt

预览

免费试读已结束,剩余 33 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

编译原理第一章引论编译原理主要内容主要章节教材和参考书第一章引论1.1什么叫编译程序1.现实例子2.翻译程序能够把某一种语言程序转换成另一种语言程序,并且,后者与前者在逻辑上是等价的。3.编译程序是翻译程序的一种特点:目标语言比源语言低级4.解释程序特点:以源语言程序作为输入,但不产生目标语言程序,而是边解释边执行按编译目的不同分类:1.诊断编译程序专门用于帮助程序开发和调试的编译程序2.优化编译程序着重于提高目标代码运行效率的编译程序按编译目标不同分类:目标机:运行编译程序所产生目标代码的计算机宿主机:运行编译程序的计算机1.交叉编译程序产生不同于其宿主机的机器代码2.可变目标编译程序不需重写编译程序中与机器代码无关的部分就能改变目标机1.机器语言计算机能够直接执行的机器指令系统例如某种计算机的指令为1011011000000000加法操作1011010100000000减法操作2.汇编语言用一些助记符号来表示机器指令例如A+BLDRAADDRB3.高级语言其语法和结构类似于自然语言,容易记忆和书写例如C语言,Java等4.源语言把被翻译(或编译)的语言称为源语言5.目标语言把翻译(或编译)之后得到的语言称为目标语言6.源程序用源语言编写的程序7.目标程序用目标语言编写的程序1.2编译过程概述任务:输入源程序,根据词法规则,对构源程序的字符串进行扫描和分解,识别出一个个单词符号单词符号是程序语言的基本成分例:A=B*C由5个单词构成:A,等号,B,乘号,CforI:=1to100do单词符号:for,I,:=,1,to,100,do实现方法:构造词法分析程序(扫描器)任务:在词法分析的基础上,根据语言的语法规则把识别出的单词符号串,分解成各类语法单位(语法范畴,如表达式、语句、程序段、过程、函数、程序等),以确定整个输入串是否构成语法上正确的“程序”。例:A=B*CB*C是表达式,A=B*C是赋值语句实现方法:构造语法分析程序(语法分析器)任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)静态语义检查:变量是否定义、类型是否正确等进行中间代码翻译例:C语言中,变量需要在使用前声明实现方法:构造语义分析程序中间代码:是一种含义明确,便于记忆的记号系统,独立于硬件,与机器指令在形式上有所接近,容易替换成机器指令。表示形式:后缀式:表示表达式,把运算量(操作数)写在前面,把运算符写在后面(后缀)例:A+B写成AB+三元式:算符第一操作对象第二操作对象表示二地址指令:四元式:算符第一操作对象第二操作对象结果表示三地址指令:任务:对中间代码进行等价变换,使生成目标代码更高效。例:实现方法:构造代码优化程序任务:把中间代码变换成特定机器上的低级语言代码。目标代码:机器语言代码、汇编语言代码例:AB+LDRAADDRB实现方法:构造生成目标代码程序1.3编译程序的结构源程序编译程序在工作过程中需要建立一系列表格,以登记源程序中所提供的或在编译过程中所产生的一些信息,编译各个阶段的工作都涉及到构造、查找、修改或存取有关表格中的信息。例符号表用来登记源程序中出现的每个名字以及名字的属性(常量名、变量名(什么类型)、过程名)在翻译各阶段把原程序错误性质和地点通知用户。语法错误:源程序中不符合语法(词法)规则的错误例如:拼写错误,括号不匹配,非法字符等语义错误:源程序中不符合语义规则的错误例如:说明错误,作用域错误,类型不一致等前端:主要由与源语言有关但与目标语言无关的那些部分组成例如:词法分析、语法分析、中间代码产生、(代码优化)后端:由与目标机有关的那些部分组成,不依赖于源语言而仅仅依赖于中间语言。例如:(代码优化)、目标代码生成等源程序四、编译前端和后端(续2)1.4编译程序与程序设计环境1.4编译程序与程序设计环境(续)1.5编译程序的生成1.直接编写机器语言、汇编语言、高级语言2.自举的方法先对语言的核心部分用机器语言编写核心部分:程序语言的三个支柱:条件、循环、调用返回然后以此为基础,再编写更多的语言成分3.移植的方法将一个已有的A机器上的编译器移植到B机器上1.6学习“编译原理”课的注意事项2.学好编译需掌握三方面知识掌握高级语言知识掌握目标语言知识(汇编)掌握编译方法3.要学新复旧离散数学数据结构高级语言4.要用动态的观点学习1.写出编译