- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译器的设计与实现 ppt制作: 张 云 时间:2008-03 课程描述 目标:编译器的设计与实现 方法: 给定语言特性,限定目标机器模型,实现该语言的编译器; 添加新的语言特性,对编译器做相应的修改。 一个简单的编译器的设计与实现 语言的设计 目标机器建模 编译器的实现 1 语言 1.1简单的C 语言的文法 program→ { var-declaration | fun-declaration } var-declaration→ int ID { , ID } //可以声明多个变量 fun-declaration→ ( int | void ) ID( params ) compound-stmt params → int ID { , int ID } | void | empty compound-stmt→ { { var-declaration } { statement } } statement→ expression-stmt∣compound-stmt ∣if-stmt ∣while-stmt | return-stmt expression-stmt→ [ expression ] ; if-stmt→ if( expression ) statement [ else statement ] while-stmt→ while( expression ) statement return-stmt→ return [ expression ] ; expression→ ID = expression | simple-expression simple-expression→ additive-expression [ relop additive-expression ] relop → | = | | = | == | != additive-expression→ term [( + | - ) term ] term→ factor [ ( * | / ) factor ] factor→ ( expression )| ID | call | NUM call→ ID( args ) args→ expression { , expression } | empty 1.2程序举例 int f1(int x,int y) { if(xy) x = x+y; x = x*2; return x; } void main() { int a; int b; a = 5; b = a + 2; a = f1(a,b); return; } 1.3进一步的扩展 2 目标机器建模 处理器 存储器 指令系统 2.1 CPU的设计 数据结构如下: public struct processor { public int ax; // 累加器AX public int bx; // BX public int cx; public int pc; // 程序计数器 public int bp; // 基址指针bp public int sp; // 堆栈指针sp public int hp; public int zf; //标志flag; ……//其它 } 详细内容将会在以后解释 2.2存储器组织 线性组织, Mem[0]~Mem[maxAddr] 功能分区: 代码区 元数据区 栈(运行时存储空间) 堆 假定每一个功能存储区的地址都是由0开始 2.3目标机器模型 数据结构 class VM { processor cpu; //虚拟机的cpu symtable;//符号表 DataTable code; //代码存储空间 int[] stack = new int[STACKSIZE]; //栈 int[] heap = new int[HEAPSIZE]; //堆 } 2.4指令系统 目标程序形式有以下几种: 绝对机器代码 可再定位机器代码 汇编语言程序 我们采用汇编语言的形式表示目标代码 格式如下: 指令集举例 MOV ax, bx ;bx ? ax MOV [addr], ax ;ax ? addr所表示的地址空间中 JMP 21 ;无条件跳转指令 CMP ax, bx ;比较ax与bx寄存器的值,设置标志寄存器 JZ 21 ;根据标志寄存器的值有条件跳转 …… 目标代码数据结构 根据目标代码的结构,不难设计它的数据结构如下: class Code { private string op; //操作码
文档评论(0)