- 编译过程一般可以分为哪些阶段?各自的作用是什么?涉及到四元式,三地址码的阶段有哪些?
一般可以划分为五个工作阶段:
(1) 词法分析,对构成源程序的字符串进行扫描和分解,识别出一个个的单词
(2) 语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位
(3) 语义分析与中间代码生成,即对各类语法单位,分析其含义并进行初步翻译
(4) 代码优化,以期产生更高效的代码
(5) 目标代码生成,把中间代码变换成特定机器上的低级语言指令形式
涉及到四元式,三地址吗的阶段有 语义分析与中间代码产生,代码优化 以及目标代码生成
- 简述语法分析中的自下而上以及自上而下的分析方法,并举出相应分析方法
自上而下分析法是:
从开始符号出发,看能否向下推导,推出目标句子
或者从根节点S开始,根据最左推导,看能否向下构造出一颗语法树,使得其末端叶节点自左至右连接证号为目标句子
例如,回溯分析法,递归下降,预测分析法等
自下而上的分析法是:
从输入串开始,逐步进行“归约”,直至归约到文法的开始符号
或者说从语法树的末端开始,步步向上归约,直到根节点
例如,算符优先,LR分析法,SLR分析法等
- 数据类型中的内部类型、用户自定义类型分别是对什么的抽象?抽象数据类型需要满足哪两个特性?
内部类型是对硬件基本位串的抽象
用户自定义类型是对内部类型和其他用户自定义类型的抽象
抽象类型是用户自定义的一种,但需要满足两个条件:①在定义该类型的程序单元中,建立与表示有关的基本操作;②对使用该类型的程序单元来说,该类型的表示是隐蔽的
- 数据类型聚合方式有几种?举例说明
笛卡尔积:PASCAL的记录,C的结构
有限映像:数组
序列:串、顺序文件
递归:指针
判定或:PASCAL的变体记录,C的联合
幂集:PASCAL的集合
- 简述代码优化的目的和意义
代码优化是尽量生成好的代码的编译阶段,也就是要对程序代码进行一种等价变换,在保证变换前后代码执行结果相同的前提下,尽量使目标程序运行时所需要的时间短,同时所占用的存储空间少
- 什么是语法制导的翻译?语义子程序实际上完成的两个具体任务是什么?
语法制导的翻译是语法分析过程中,根据每个产生式所对应的语义子程序进行翻译的办法叫做语法制导翻译
语义子程序实际上完成语义检查和语义处理,它的核心任务是生成相应的中间代码
- 从优化的范围的角度,优化可以分为哪两类?循环优化的方法包括哪些?
从优化的范围的角度,优化可以分为局部优化和全局优化两类
循环优化的方法包括:代码外提,强度削弱,删除归纳变量
8.词法分析中,单词可分为哪5种类别?
- 标识符:用来命名程序中出现的变量、数组、函数、过程、标号等
- 基本字:也可称关键字或保留字,如 if,while,for,do,goto等
- 常数:各种类型的常数,如216,3.14159,TRUE等
- 运算符:如+,-,*,/ 等
- 界符:如;,:,/*, */等
- 什么是绑定,静态绑定和动态绑定有什么区别?
绑定:一个对象(或事物)与其某种属性建立起某种联系的过程
静态绑定:凡是在编译时能确定的属性,称为静态属性。若绑定在编译时完成,运行时不改变,称为静态绑定
动态绑定:凡是在运行时才能确定的属性称为动态的。若绑定在运行时完成,称为动态绑定