正在加载图片...
380 翁译原理及实践 China-pub.com 下载 A【01 数组A的基本地址 A【21 栈中数组A的元素的分配空间 etc. 注意,数组的地址通过从基地址中减去索引值计算。 当一个数组传递给函数时,仅传递基地址。基元素区域的分配只进行一次,并在数组生存 期间保持固定。函数参数不包括数组的实际元素,仅仅是地址。因此,数组参数是引用参数。 当数组参数在函数内部引用时这将引起异常,因为在存储器中保存的必须看成是它们的基地址 而不是值。因此,数组参数计算基地址时使用LD操作代替LDA。 A.5使用C-和TM的编程设计 基于本书中讨论的TNY编译器(其清单在附录B中),对于一个学期编译课程来说,要求把 一个C一语言的完整的编译器作为设计不是没有道理。这可以进行一些调整,当研究了相关的 理论后实现编译器的每个阶段。另一方面,C一编译器的一个或多个部分可以由导师提供,要 求学生完成剩余的部分。当时间较短(如1/4学年)或者学生要产生“实际”机器的汇编代码,如 Sparc或PC(在代码生成阶段要求更多的细节),这就特别有用。对于仅实现C一编译器的一部分 这就不怎么有用,因为各部分之间的相互作用和代码测试的能力被限制了。下列分列的任务清 单提供了一种安排,要注意每个任务与其他任务都不是独立的,最好完成所有的任务以获得完 整的编写编译器的经验。 设计 L.实现适合于C一的一个符号表。要求表结构结合作用域信息,用于当各个独立的表链接 到一起,或者有一个别除机制,用基于栈的方式操作,如第6章所述。 2.实现一个C一扫描器,或者像DFA用手工进行,或者使用Lx,如第2章所述 3.设计一个C一语法树结构,适合于用分析器产生。 4.实现一个C一分析器(这要求一个C一扫描器),或者使用递归下降用手工进行,或者使用 Yacc,如第4、5章所述。分析器要产生合适的语法树(见设计3) 5.实现C一的语义分析器。分析器的主要要求是,除了在符号表中收集信息外,在使用变 量和函数时完成类型检查。因为没有指针或结构,并且仅有的基本类型是整型,类型检 查器需要处理的类型是空类型、整型、数组和函数。 6.实现C一的代码产生器,其根据是前一节描述的运行时环境。 注意,数组的地址通过从基地址中减去索引值计算。 当一个数组传递给函数时,仅传递基地址。基元素区域的分配只进行一次,并在数组生存 期间保持固定。函数参数不包括数组的实际元素,仅仅是地址。因此,数组参数是引用参数。 当数组参数在函数内部引用时这将引起异常,因为在存储器中保存的必须看成是它们的基地址 而不是值。因此,数组参数计算基地址时使用L D操作代替L D A。 A.5 使用C-和T M的编程设计 基于本书中讨论的T I N Y编译器(其清单在附录B中),对于一个学期编译课程来说,要求把 一个C-语言的完整的编译器作为设计不是没有道理。这可以进行一些调整,当研究了相关的 理论后实现编译器的每个阶段。另一方面, C-编译器的一个或多个部分可以由导师提供,要 求学生完成剩余的部分。当时间较短(如1 / 4学年)或者学生要产生“实际”机器的汇编代码,如 S p a r c或P C (在代码生成阶段要求更多的细节),这就特别有用。对于仅实现C-编译器的一部分 这就不怎么有用,因为各部分之间的相互作用和代码测试的能力被限制了。下列分列的任务清 单提供了一种安排,要注意每个任务与其他任务都不是独立的,最好完成所有的任务以获得完 整的编写编译器的经验。 设计 1. 实现适合于C-的一个符号表。要求表结构结合作用域信息,用于当各个独立的表链接 到一起,或者有一个删除机制,用基于栈的方式操作,如第 6章所述。 2. 实现一个C-扫描器,或者像D FA用手工进行,或者使用L e x,如第2章所述。 3. 设计一个C-语法树结构,适合于用分析器产生。 4. 实现一个C-分析器(这要求一个C-扫描器),或者使用递归下降用手工进行,或者使用 Ya c c,如第4、5章所述。分析器要产生合适的语法树(见设计3 )。 5. 实现C-的语义分析器。分析器的主要要求是,除了在符号表中收集信息外,在使用变 量和函数时完成类型检查。因为没有指针或结构,并且仅有的基本类型是整型,类型检 查器需要处理的类型是空类型、整型、数组和函数。 6. 实现C-的代码产生器,其根据是前一节描述的运行时环境。 3 8 0 编译原理及实践 下载 数组A的基本地址 栈中数组A的元素的分配空间
<<向上翻页
©2008-现在 cucdc.com 高等教育资讯网 版权所有