编译原理复习资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(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)编译程序是一种解释程序吗?还是什么程序?

解答:编译程序是一种翻译程序。

相关文档
最新文档