- 1、本文档共53页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理-精选版.ppt
1.1 语言处理器 编译器 编译器是一种翻译器 特点:目标语言比源语言低级 编程语言 传统程序设计语言:Pascal、C++、Java 专用语言:Lisp、Prolog、LaTeX 编程语言 机器语言 编译器 * 1.1 语言处理器 编译器 编译器是一种翻译器 特点:目标语言比源语言低级 机器语言(操作:寄存器BX的内容送到AX中) 机器指令 1000100111011000???????????????? 汇编指令 mov?ax,bx???????????????????? 编程语言 机器语言 编译器 * 1.1 语言处理器 编译器 编译器是一种翻译器 特点:目标语言比源语言低级 编程语言 机器语言 编译器 * 1.2 编译器结构(1.2) 分析部分 前端:源程序-中间表示 综合部分 后端:中间表示-目标程序 * 1.2 编译器结构 一个编译器的各个步骤 图1.6 编译器的工作可以分成若干阶段,每个阶段把源程序从一种表示变换成另一种表示。 符号表管理器 出错管理器 * 1.2 编译器结构 一个编译器的各个步骤 实例:图1.7一个赋值语句的翻译 * 1.2 编译器结构 前端 * 后端 1.2 编译器结构 编译器的前端与后端 前端:只依赖于源语言 后端:编译器中依赖于目标机器的部分,一般独立于源语言,而与中间语言有关。 前端+后端:组合 取一个编译器前端,重写它的后端以产生同一源语言在另一机器上的编译器 把几种不同的语言编译成同一种中间语言,让不同的前端使用同一后端,从而得到一台机器上的几个编译器 编译的几个阶段常用一趟/遍(pass)扫描来实现,一趟/遍扫描包括读一个输入文件和写一个输出文件。 * 1.2 编译器结构 词法分析 逐个读构成源程序的字符,把它们组成词法单元(token)流。 实例:position = initial + rate * 60 (1)标识符(position) (2)赋值号(:=) (3)标识符(initial) (4)加号(+) (5)标识符(rate) (6)乘号(*) (7)数(60) * 1.2 编译器结构 词法分析 逐个读构成源程序的字符,把它们组成词法单元(token)流。 实例: 编译器的词法分析也叫做线性分析或扫描。 词法分析 * position = initial + rate * 60 id,1 = id,2 + id,3 * 60 1.2 编译器结构 语法分析 把词法记号流依照语言的语法结构按层次分组,以形成语法短语。 实例: position = initial + rate * 60 的语法分析树 * 1.2 编译器结构 语法分析 表达式、语句等程序层次结构通常由递归的规则表示 实例:表达式 任何一个标识符都是表达式; 任何一个数都是表达式; 如果e1和e2都是表达式,那么e1+ e2、e1* e2、(e1)、(e2)也都是表达式。 * 1.2 编译器结构 语法分析 表达式、语句等程序层次结构通常由递归的规则表示 实例:语句 如果identifier是标识符,expression是表达式,那么 identifier := expression是语句。 如果 expression 是表达式,statement是语句,那么 while (expression) do statement if (expression) then statement 也都是语句。 * 1.2 编译器结构 语法分析 把词法记号流依照语言的语法结构按层次分组,以形成语法短语。 实例:position = initial + rate * 60 的语法树 * 1.2 编译器结构 语义分析 检查程序的语义正确性,以保证程序各部分能有意义地结合在一起,为后面代码生成阶段收集类型信息。 类型转换 类型检查 语法制导翻译 real型 * 1.2 编译器结构 中间代码生成 中间代码位于高级编程语言和机器语言(目标程序)之间 后缀表示: 9+5-2 ? 95+2- 抽象语法树: 三地址码 * 1.2 编译器结构 代码优化 改进代码,以产生执行较快的机器代码。 * 1.2 编译器结构 目标代码生成 生成可重定位的机器代码或汇编码 为源程序所用的每个变量选择存储单元,并且把中间代码翻译成等价的机器指令序列。 关键问题是寄存器分配。 * 1.2 编译器结构 符号表管理 编译器的一项重要工作是记录源程序中使用的标识符,并收集每个标识符的各种属性。 这些属性提供标识符的存储分配、类型和作用域信息。 如果是过程标识符,还有参数的个数和类型、参数传递方式和返回值类型。 符号表是为每个标识符保存一个记录
文档评论(0)