编译原理简答题答案

时间:2022-05-17 03:13:14 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
(1) 简述规范归约的基本思想。(第五章课件第5张)

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



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

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

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

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

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

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

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

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



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

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

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

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

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

3(正规文法,有限自动机):产生式形如: A aB A a其中: a VT {}ABVN产生式形如: A Ba A a 其中: a VT {}ABVN

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


课本P7

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

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



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


本文来源:https://www.wddqw.com/doc/06c731037075a417866fb84ae45c3b3566ecdd71.html