lec1(中科大-编译原理)重点.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理与技术》讲义 编译原理与技术 第一章 引论 什么是编译程序? 翻译程序、解释程序和汇编程序 编译程序的组成结构 编译程序的生成 相关话题 语言翻译过程 算法描述,求某整数n的阶乘fact n , n≥0 1 // n 0 fact n n * fact n-1 // n! n * n-1 ! 伪语言描述 fact n if n ≤ 0 then 1 else n*fact n-1 语言翻译过程 高级程序设计语言描述,(如C语言) int fact int n if n 0 return 1; else return n*fact n-1 ; 语言翻译过程 输入命令 cc foo.c 语言翻译过程 语言翻译过程 为何不设计直接运行高级语言的机器? ?机器本身的指令系统(二进制) ?语言本身扩展 什么是编译程序? 什么是编译程序? 源语言(程序)到目标语言(程序)的映射转换或者翻译过程 系列转换(翻译)过程 解释程序与汇编程序 均属于翻译程序 C函数fact的汇编语言形式 .file foo.c .text .globl fact .type fact,@function fact: pushl %ebp movl %esp, %ebp subl $4, %esp cmpl $0, 8 %ebp jg .L2 movl $1, -4 %ebp jmp .L1 .L2: subl $12, %esp movl 8 %ebp , %eax decl %eax 编译程序的组成结构 词法分析阶段 语法分析阶段 语义分析、中间代码生成 优化阶段 目标代码生成 编译程序的组成结构 编译程序的组成结构 例子,hoo.c: main float position, initial, rate; position initial + rate * 60; 编译程序的组成结构 词法分析阶段-scanner 字符流 - 记号流 编译程序的组成结构 语法分析阶段-parser 记号流 - 分析树(语法树) 编译程序的组成结构 语义分析 语义树-带有语义信息的分析树(语法树) 编译程序的组成结构 中间代码生成 形式多样 - 三地址码,p-code等 t1 : int_to_float 60 t2 : id3 * t1 t3 : id2 + t2 id1 : t3 编译程序的组成结构 代码优化 得到“优化”后的中间代码;也可以在最后的代码生成阶段实施“优化” t1 : rate * 60.0 // 直接用浮点数60.0 position : initial + t1 // 去除多余的 // 临时变量 较优化前,减少2条中间代码 编译程序的组成结构 代码生成 与目标机器有密切联系,如指令选择,寄存器的使用等。 movf rate, R1 mulf #60.0, R1 movf initial, R2 addf R2, R1 movf R1, position 编译程序的组成结构 符号表管理 编译程序的组成结构 出错处理 程序错误分类 出错处理的目标与方法 1 if n 0 return 1; // missing “ ” 2 if n 0 return 1 // missing “;” else return n * fact n-1 ; 编译程序的组成结构 编译程序生成 手工编写 耗时,“效率”问题。 自动生成 各个阶段基本上有相应的自动生成工具,如 lex、yacc。 自展(bootstrapping 编译程序生成 编译程序的自展/自编译 T型图 编译程序生成 编译程序的自展/自编译 我们的目标是在机器A(目标语言)上,用语言A(实现语言)构造高级语言L(源语言)的编译程序。 编译程序生成 编译程序的自展/自编译 Step1: 我们可以考虑源语言L的子集语言S, S ?L。在机器A(目标语言)上,用语言A(实现语言)构造语言S的编译程序。 编译程序生成 编译程序的自展/自编译 Step2: 在机器A(目标语言)上,用语言S(实现语言)构造语言L的编译程序。 编译程序生成 编译程序的自展/自编译 Step3: 编译程序生成 编译程序的移植/交叉编译 考虑将A机器上语言L的编译实现移植到机器B上,即我们的目标是: 编译程序生成 编译程序的移植/交叉编译 我们已有的编译程序是: 编译程序生成 编译程序的移植/交叉编译 Step1: 编译程序生成 编译程序的移植/交叉编译 Step2

文档评论(0)

1192212 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档