简答题"/>
编译原理简答题
第1章 编译的工作阶段
简述编译程序的工作过程。
答:编译程序的工作过程,是指从输入源程序开始到输出目标程序为止的整个过程, 是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:
①词法分析,对构 成源程序的字符串进行扫描和分解,识别出一个个的单词;
②语法分析,根据语言 的语法规则,把单词符号串分解成各类语法单位;
③语义分析与中间代码产生,即 对各类语法单位,分析其汉一并进行初步翻译;
④代码优化,以期产生更高效的代 码;
⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。
编译器粗略分为词法分析,语法分析,类型检查,中间代码生成,代码优化,目标代码生成,目标代码优化。把中间代码生成及之前阶段划分问编译器的前端,那么后端与前端是独立的。后端只需要一种中间代码表示,可以是三地址代码或四元式等,而这些都与前端生成的方式无关。
什么是语法制导翻译?为什么把这种方法叫语法制导翻译?
解答:
所谓语法制导翻译,是指在语法规则的制导下,通过计算语义规则,完成对输入符号串的翻译。
由于使用属性文法时把语法规则和语义规则分开,但在使用语法规则进行推导或规约的同时又使用这些语义规则来知道翻译与最终产生目标代码,所以称为语法制导翻译。
第8章符号表的作用
在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性。在词法分析及语法在分析过程中不断积累和更新表中的信息,并在词法分析到代码生成的各阶段,按各自的需要从表中获取不同的属性信息。不论编译策略是否分趟,符号表的作用和地位是完全一致的
符号表的作用
① 收集符号属性
编译程序扫描说明部分收集有关标识符的属性,并在符号表中建立符号的相应属性信息。
②上下文语义的合法性检查的依据
同一个标识符可能在程序的不同地方出现,而有关该符号的属性是在这些不同情况下收集的。特别是在多趟编译及程序分段编译(在PASCAL及C中以文件为单位)的情况下,更需检查标识符属性在上下文中的一致性和合法性。通过符号表中属性记录可进行相应上下文的语义检查。
③作为目标代码生成阶段地址分配的依据
每个符号变量在目标代码生成时需要确定其在存储分配的位置(主要是相对位置)。语言程序中的符号变量由它被定义的存储类别(如在C、FORTRAN语言中)或被定义的位置(如分程序结构的位置)来确定。首先要确定其被分配的区域。
第10章代码优化
代码优化按照优化的代码块尺度分为:局部优化、循环优化和全局优化。即
1. 局部优化:只有一个控制流入口、一个控制流出口的基本程序块上进行的优化;
2. 循环优化:对循环中的代码进行的优化;
3. 全局优化:在整个程序范围内进行的优化。
1. 常见的代码优化手段
常见的代码优化技术有:删除多余运算、合并已知量和复写传播,删除无用赋值等。
2. 基本块的优化手段
由于基本块内的逻辑清晰,故而要做的优化手段都是较为直接浅层次的。目前基本块内的常见的块内优化手段有:
1. 删除公共子表达式
2. 删除无用代码
3. 重新命名临时变量
4. 交换语句顺序
5. 在结果不变的前提下,更换代数操作
循环优化的主要手段有:循环次数无关性代码外提、删除归纳变量和运算强度削弱。
何谓代码优化?进行优化所需要的基础是什么?
答案:
对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加快或占用存储空间减少, 或两者都有。优化所需要的基础是在中间代码生成之后或目标代码生成之后。
原则方法有
①优化的原则:等价原则、有效原则、合算原则。
②优化分为:局部优化、循环优化、全局优化。
③具体方法有:删除公共子表示式,复写传播,删除无用代码,代码外提,
强度削弱,删除归纳变量。
简述代码优化的目的和意义。
答:代码优化是尽量生成“好”的代码的编译阶段。也就是要对程序代码进行一种等价变换, 在保证变换前后代码执行结果相同的前提下, 尽量使目标程序运行时所需要的时间短,同时所占用的存储空间少。
NFA原则
ε分支与合流
ε自闭包与整体闭包(来回)
状态矩阵:行:新状态 列:输入的终结符
内容:为根据词法分析(自动机)可最终到达的符号集合
确定化:终态集,非终态集合
两个集合逐步划分,直到不可划分(里面的符号集产生式右部内容一样,不可区分)
LL(1)
更多推荐
编译原理简答题
发布评论