编译原理简答题答案 下载本文

内容发布更新时间 : 2024/9/21 16:29:37星期一 下面是文章的全部内容请认真阅读。

(1) 简述规范归约的基本思想。(第五章课件第5张)

用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。

(2) 阐述编译程序各个组成部分主要完成的工作。(课本P2~P4)

词法分析的任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。

语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位。

语义分析与中间代码产生:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译。 优化:在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效的目标代码。

目标代码生成:把中间代码变换成特定机器上的低级语言代码。

(3) 什么是编译器的前端和后端,这样划分有何意义?(课本P7) 编译器粗略分为

词法分析,语法分析,类型检查,中间代码生成, 代码优化,目标代码生成,目标代码优化。

把中间代码生成及之前阶段划分问编译器的前端,那么后端与前端是独立的。后端只需要一种中间代码表示,可以是三地址代码或四元式等,而这些都与前端生成的方式无关。也就是不论你前端是用fortran还是c/c++,只要生成了中间代码表示就可以了,后端是不管你是用哪种语言生成的。

(4) 乔姆斯基把文法分为哪几种类型?对这几种类型文法作简要说明。(课本P34)

把文法分成四种类型:0,1,2,3型。与上下文无关文法一样,它们都由四部分组成,但对产生式的限制有所不同。

0型(短语文法,图灵机):产生式形如: ? ? ? 其中:?? (VT ? VN)*且至少含有一个非终结符;?? (VT ? VN)*

1型(上下文有关文法,线性界限自动机):产生式形如: ? ? ? 其中:|?| ? |?|。仅 S?? 例外,但此时S不得出现在任何产生式的右部。

2型(上下文无关文法,非确定下推自动机):产生式形如: A ? ? 其中:A? VN;?? (VT ? VN)*。

3型(正规文法,有限自动机):产生式形如: A ? aB 或 A ? a其中: a? VT ? {?};A,B?VN产生式形如: A ? Ba 或 A ? a 其中: a? VT ? {?};A,B?VN。

(5) 简述编译过程中遍的概念以及遍数的多少对编译器设计的影响。(参考

课本P7)

遍的概念:对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。

遍可以和阶段相应,也可无关——遍中通常含有若干个阶段。实际上,根据语言的不同,编译器可以是一遍(onepass)——所有的阶段由一遍完成,其结果是编译得很好,但(通常)代码却不太有效。Pascal语言和C语言均允许单遍编译。(Modula-2语言的结构则要求编译器至少有两遍)。大多数带有优化的编译器都需要超过一遍:典型的安排是将一遍用于扫描和分析,将另一遍用于语义分析和源代码层优化,第3遍用于代码生成和目标层的优化。更深层的优化则可能需要更多的遍: 5遍、6遍、甚至8遍都是可能的。

备注:由于最后一道没有找到比较好的答案,欢迎大家补充。