当前位置:文档之家› 编译原理复习资料

编译原理复习资料

(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遍都是可能的。

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

1) 什么是句子?什么是语言?
* 解答:句子——设G是一个给定的文法,S是文法的开始符号,如果S x(其中x *∈VT),则称x是文法的一个句子。

语言——语言是句子的集合。

或——设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x│Sx,x∈VT*} 。

2) DFA与NFA有何区别?
解答:DFA与NFA的区别表现为两个方面:一是NFA可以有若干个开始状态,而DFA
仅只有一个开始状态。

另一方面,DFA的映象M是从K×∑到K,而NFA的映象M是从K×∑到K 的子集,即映象M将产生一个状态集合(可能为空集),而不是单个状态。

3) 自顶向下的语法分析方法的基本思想是什么?
解答:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的
向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。

4) 自底向上的语法分析方法的基本思想是什么?
解答:从给定的输入串(终结符串)开始,根据文法的规则一步一步的向上进行直接
归约,试图归约到文法的开始符号。

5) 一个上下文无关文法G包括哪四个组成部分?
解答:一组非终结符号,一组终结符号,一个开始符号,以及一组产生式。

6) 在自底向上的语法分析方法中,分析的关键是什么?
解答:关键是寻找句柄。

7) 在自顶向下的语法分析方法中,分析的关键是什么?
解答:关键是选择候选式。

8) 编译程序中语法分析器接收以什么为单位的输入?
解答: 接收以单词为单位的输入。

9) 若一个文法是递归的,则它所产生的语言的句子是可枚举的吗?
解答: 它所产生的语言的句子不是可枚举的,而是无穷多个。

10) 编译程序生成的目标程序是不是一定是机器语言的程序?
解答:不一定是机器语言的程序。

11) 词法分析器是用于做什么的?
解答:词法分析器是用于识别单词的。

12) “用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行”这
种说法正确吗?
解答: 不正确。

13)
解答: 由汇编器(汇编程序)完成的。

14)图示运行时存储空间的划分(分为哪几个区)。

解答: 一般分为静态区和动态区:程序代码区、静态数据区、栈区和堆区
15)词法分析的主要任务是什么?
解答:词法分析器的任务是对构成源程序的字符串从左到右逐个字符逐个字符地进
行扫描,依次把它们识别为一个一个具有独立意义的单词,并确定其属性,再转换为长度统一的属性字并输出。

16)常用的中间语言种类有哪几种?
解答: 常用的中间语言种类有逆波兰表示、三元式、四元式和树形表示。

17)文法G所描述的语言是什么的集合?
解答:是由文法的开始符号推出的所有终结符串的集合。

或说是句子的集合。

18)乔姆斯基把文法分为四种类型,即0型、1型、2型、3型。

其中2型文法叫什么?
解答: 2型文法叫上下文无关文法。

19)编译程序是一种解释程序吗?还是什么程序?
解答:编译程序是一种翻译程序。

20)按逻辑上划分,编译程序第二步工作是什么?
解答: 编译程序第二步工作是语法分析。

21)源程序是用高级语言编写的,目标程序是机器语言程序或汇编语言程序,则其翻译程序称为什么?
解答: 其翻译程序称为编译程序。

22)编译方式与解释方式的根本区别为什么?
解答:编译方式与解释方式的根本区别在于是否生成目标代码。

23)常见的动态存贮分配策略有哪两种?
解答:常见的两种动态存贮分配策略是栈式动态分配策略和堆式动态分配策略。

24)常用的参数传递方式有哪三种?
解答:常见的参数传递方式有传地址、传值和传名三种方式。

25)语法分析的任务是什么?
解答:语法分析的任务是识别给定的终结符串是否为给定文法的句子。

26)局部优化是局限于一个什么范围内的一种优化?
解答: 是局限于一个基本块范围内的一种优化。

27)文法等价的定义是什么?
解答: 设G1和G2是给定的文法,如果有L(G1)= L(G2),则称G1与G2等价。

28)在语法分析处理中,FIRST集合、FOLLOW集合、SELECT集合均是什么集合?解答: 均是终结符集。

29)通常一个编译程序中应包括哪七个部分?
解答: 通常一个编译程序中应包含词法分析,语法分析,语义分析与中间代码生成,代码优化,目标代码生成以及表格处理和出错处理等七个部分。

32)如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分为哪三个阶段?
解答: 源程序的执行分为三个阶段: 编译阶段,汇编阶段和运行阶段。

33)翻译程序是这样一种程序,它能够将用什么转换成与其等价的用乙语言书写的程序?解答:能够将用甲语言书写的程序转换成与其等价的用乙语言书写的程序。

34)说明下面文法G[S]是二义性文法:S→SaS|SbS|cSd|eS|f
解答:fafbf是文法G[S]的一个句子,并且有两个不同的最右推导。

(1)S => SaS => SaSbS => SaSbf=> Safbf=> fafbf
(2)S => SbS => Sbf=> SaSbf => Safbf=> fafbf
因此说明此文法有二义性。

35)在属性文法中,综合属性与继承属性是如何传递信息的?
解答: 综合属性用于自下而上传递信息,继承属性用于自上而下传递信息。

36)代码优化的主要目标是什么?
解答: 代码优化的主要目标是如何提高目标程序的运行速度和如何减少目标程序运
行时所需的空间。

37)写一个文法,使其语言是无符号二进制实数(不含指数)。

解答:文法G(N):
N→L.L|L
L→LB|B
B→0|1。

相关主题