编译原理简答
1简述编译程序的工作过程
答:编译程序的工作包括从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。编译程序的工作过程可以划分为五个阶段。 (1) 词法分析:从左到右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。
(2) 语法分析:在词法分析的基础上把单词符号串分解成各类语法单位。 (3) 语义分析与中间代码生成:其任务是对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译。 (4) 代码优化:其任务是对前一阶段产生的中间代码进行加工变换,以期在最后阶段能生产出更为高效的目标代码。 (5) 目标代码生成:其任务是把中间代码变换成特定机器上的低级语言代码。
2目标代码有几种形式,生成目标代码应注意的问题。 答:目标代码一般有以下3种形式: (!)能够立即执行的机器语言代码 (2)待装配的机器语言模块 (3)汇编语言代码
生成目标代码应注意的问题如下: (!)如何使生成的目标代码较短 (2)如何充分利用寄存器,减少目标代码中访问存储单元的次数。 3简述LR(0)分析器
答:LR(0)分析是一个自上而下分析的技术,它可用于很大一类上下无关文法的语法分析。L表示从左到右扫描输入串,R表示构造一个最右推导的逆过程,0表示最多向前看0个符号。LR(0)分析器实质上是一个带先进后出存储器(栈)的确定有限状态自动机,可以把“历史”和“展望”拆料综合地抽象成某些“状态”,分析栈用来存放状态。 4简述自下而上的分析方法 答:所谓自下而上分析方法就是从输入串开始,逐步进行“归约”,直到归约到文法的开始符号。或者说,从语法树的末端开始,步步而上“归约”直到根节点。 5简述代码优化的目的和意义
答:代码优化的目的是为了产生更高效的代码。
由优化编译程序提供的对代码的各种变换必须遵循一定的原则: (1) 等价原则:优化不应改变程序运行的结果 (2) 有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小。 (3) 合算原则:应尽可能以较低的代价取得较好的优化效果。