编译方法刘秉瀚陈晖,第1章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译方法刘秉瀚陈晖,第1章

* * * * Reviewing the Entire Process Errors position = initial + rate * 60 lexical analyzer syntax analyzer semantic analyzer intermediate code generator id,1 = id,2 + id,3* 60 = id1 id2 id3 + * 60 = id1 id2 id3 + * inttoreal 60 Symbol Table position .... initial …. rate…. * Reviewing the Entire Process Errors intermediate code generator code optimizer final code generator t1 = inttoreal(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3 t1 = id3 * 60.0 id1 = id2 + t1 LDF R2 , id3 MULF R2, R2 , #60.0 LDF R1 , id2 ADDF R1, R1 , R2 STF id1, R1 position .... initial …. rate…. Symbol Table 3 address code * 四、编译器的构造 要在一台机器上为某种语言构造一个编译程序,必须从下述三方面入手: (1) 源语言:是编译程序处理的对象。对被编译的源语言要深刻理解其结构和含义,即该语言的词法、语法和语义规则,以及有关的约束和特点; (2) 目标语言与目标机:是编译程序处理的结果和运行环境。目标语言是汇编语言或机器语言,必须对硬件系统结构,操作系统的功能,指令系统等很清楚; (3) 编译方法与工具:是生成编译程序的关键。必须准确掌握把一种语言的程序翻译为另一种语言的程序的方法。同时应考虑所使用的方法与既定的源语言、目标语言是否相符合,构造是否方便,从时间、空间上考虑是否高效,实现的可能性和代价等诸多因素,并尽可能考虑使用先进、方便的生成工具。 * 编译器构造工具 语法分析器的生成器: 根据程序设计语言的语法描述自动生成语法分析程序。 扫描器的生成器: 根据语言的单词正则表达式生成词法分析程序 语法指导的翻译引擎: 生成一组用于遍历分析树并生成中间代码的例程。 自动代码生成程序: 依据一组将中间代码翻译成机器语言的规则,生成一个代码生成程序。 数据流引擎: 帮助收集数据流信息,支持优化。 编译器构造工具集:提供用于构造编译器不同阶段的例程的工具集合。 * 编译程序的实现方式 生成编译程序的方法有: 1.直接用机器语言或汇编语言编写(编译程序核心部分常用汇编语言编写); 2.用高级语言编写编译程序(这是普遍采用的方法); 3.自编译(用某种高级语言书写自己的编译程序); 4.用编译工具自动生成部分程序:LEX(词法分析)与YACC(用LALR分析方法自动生成语法分析器); 5. 移植(同种语言的编译程序在不同类型的机器之间移植)。 * 五、编译技术的应用 编译并不限于程序设计语言的应用 Text Formatters正文格式化程序 输入是一个字符流,输出的是排版好的字符串。 Silicon Compilers硅片编译程序 输入是一个源程序,输出是一个电路设计。 Database Query Processors数据库查询处理程序 Database Query Languages Are Also a Programming Language 查询解释器把含有关系和布尔运算的谓词翻译成数据库命令,在数据库中查询满足该谓词的记录 * 六、程序设计语言基础 静态与动态区别 环境与状态 静态作用域 动态作用域 参数传递 别名 * 静态与动态区别 静态策略:编译时刻可以决定问题的策略 动态策略:在运行时刻才能决定问题的策略 静态作用域:通过阅读程序可以确定声明的作用域 动态作用域:运行时,同一个对x的使用会指向x几个声明中的某一个 例子:Java类中成员变量x声明的作用域 public int x;---动态策略,每个对象都有自己用于存放 x 的位置,因此编译是无法预先确定这些位置。 public static int x;---x为类变量,静态策略,在编译时可以确定存放 x 的内存位置。 * 环境与状态 环境:从名字到内存的映射。声明决定其环境,名字?变量映射。 状态:内存位置到其值的映射。 x=y+1:该语句改变了 x 的状态。 … int i ; /*全局i */ … void f(…)

文档评论(0)

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

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

1亿VIP精品文档

相关文档