北京工业大学编译原理考试一纸开卷【期末复习总结】

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

1、简要解释编译程序中的遍(趟)的含义。

就是对源程序或者源程序的中间结果从头到尾扫描一次,并作有

关的加工处理,生成新的中间结果和目标程序.通常,每遍的工作有外存上获得的前一遍的中间结果开始,完成它所含的有关工作之后,再把结果记录于外存..既可以将几个不同阶段合为一遍,也可以把一个阶段的工作分为若干遍。

2、何为“标识符”?何为“名字”?两者的区别是什么?在程序设计语言中,标识符是一个最基本的概念,其定义为:凡以字母开头的字母数字序列(有限个字符)都是标识符。当给予某标识符以确切的含义时,这个标识符就叫做名字。程序语言中各种名字都是用标识符表示的,只是标识符是一个没有意义的字符序列,而名字却有着确切的意义和属性。

3、简述为什么自顶向下的语法分析技术不能处理具有左递归的文法?这是由于在自顶向下的语法分析技术中,要解决的问题是根据当前输入符号判断将栈顶(最左)的非终结符号替换成哪条规则的右部,若文法具有左递归,则在分析过程中,无法判断岀替换的规则,造成无穷递归求解的过程。

4、简述编译程序的工作过程

编译程序的工作过程,是指从输入源程序开始到输岀目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别岀一个个的单词;②语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;④代码优化,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。

5、什么是语法制导翻译?

是指在语法规则的制导下,通过计算语义规则,完成对输入符号的翻译。由于使用属性文法时把语法规则和语义规则分开,但在使用语法规则进行推导或归约的同时又使用这些语义规则来指导翻译与最终产生目标代码,所以称为语法制导翻译。

6、请简要阐述高级程序设计语言参数传递的常用方式

1、传值:计算实参并将其右值传递给被调用过程

2、传地址:

调用过程将实参地址传递给被调用过程3、传值结果:将传值和

传地址两种方式结合4、传名:只有在被调用过程中用到形参时才动态的建立起它与实参的联系

7、什么是自展?什么是交叉编译?

自展过程就是用低级语言先实现一个简单的编译器,然后用这个编译器的语言再去编写一个更高级的编译器一一' 个新编译器是

旧编译器的扩展一一的过程。编译器的运行环境与产生程序的运行环境不同的编译过程叫做交叉编译

8、计算机执行用高级语言编写的程序有哪些途径?其主要区别

是什么?

解释和编译。解释不生成目标代码。

9、自顶向下的语法分析方法中需要解决的主要问题?如何表

示?

主要需要解决回溯与左递归。回溯:匹配多个候选式无法快速匹配;左递归:推导过程无休止。解决:提取公共左因子、消除直接及间接左递归。翻译程序:能够把某种语言转换成另一种语言,而后者与前者在逻辑上是等价的。

语义分析与中间代码产生:对语义分析所识别岀的各类语法范

畴,分析其含义并进行初步翻译(产生中间代码)

编译程序结构:表格管理、岀错处理

编译前端:由与源语言有关但与目标语言无关的那些部分组成,包括词法分析、语义分析、语义分析与中间代码产生。

后端:编译程序中与目标语言有关那些部分,优化与目标代码生

成。后端不依赖于源语言而仅仅依赖于中间语言。

词法规则是指单词符号的形成规则。

语言的语法规则规定了如何从单词符号形成更大的结构(语法单位)。二义性:如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。

LL(1)的含义:第一个L表示从左到右扫描输入串,第二个L表示

最左推导,1表示分析时每一步只需向前查看一个符号

自上而下分析的问题:①文法含有左递归时,分析过程会陷入无限循环②回溯浪费分析时间③某一非终结符用某一候选式匹配成功时,可能是暂时的④分析不成功时,难以找到岀错位置

自下而上分析的问题:怎样判断栈顶的符号串的可归约性,以及如

何归约。

一个句型的最左直接短语称为该句型的句柄。

在形式语言中最右推导常被称为规范推导,由规范推导所得的句型称为规范句型,如果文法无二义的,那么规范推导(最右推导)的逆过程必是规范归约(最左归约)

输入串-----语法树——依赖图-------- 语义规则计算次序

最左规约=规范规约:A

最右推导=规范推导:B

短语:子树的末端结点形成的符号串.

短语相对的句型:整个树的末端结点.

简单子树:只有一层分支的子树

简单短语(直接短语):简单子树的末端结点形成的符号串. 句柄:最左直接短语

素短语:是个短语,并且至少含有一个终结符,并且,除它自身之外不再含任何更小的素短语

上例G〔引:句型Mg的语法时

共有三裸子轲.

三4趣语:血Sfi 简羊範待:H, Sb 勺柄:A

例题1、构造下面文法的LL (1)分析表。

“ TL int | real L 宀id R , id R | £

FIRST ( D) =FIRST (T) ={int, real}

FOLLOW (D) =FOLLOW ( L) ={#}

FIRST ( L) ={id}

FOLLOW (T) ={id}

FIRST (R) ={ , , £}

FOLLOW (R) ={#}

注意当FIRST (X)含£还需要看FOLLOW (X)

例题2、已知文法: A —aAa| £ (1 )该文法是LL (1 )文法吗?为什么?

(2)

采用LL ( 1 )方法进行语法分析,如何得到该文法的 LL

(1 )分析表?

(3) 若输入符号串“ aaaa ”,请给出语法分析过程。 1、 不是,因为产生式 A — aAa| £有空产生式右部,而

FOLLOW(A)={#} U FIRST(a)={a, #} 造成 FIRST(A) n FOLLOW(A)={A, £ Q {a, #}工?

2、 修改文法为 A — aaA| £

FOLLOW(A)={#} U FOLLOW(A)={#}, 因而 FIRST(A) n FOLLOW(A)={a, £ n {#}=? 3、

S — (L) | a

L — L , S | S

试写岀一个语法制导定义,它输岀配对括号个数

为S 、L 引入属性h,代表配对括号个数。语法制导定义如下: 产生式 语义规则 S — (L) S.h:=L.h+1 S — a S.h:=O L — L1 , S L.h:=L1.h+S.

h

L — S L.h:=S.h S '— S print(S.h)

例题 4、S — aS|bS|a

(1) 构造该文法的LR(0)项目集规范族

(2) 构造识别该文法所产生的活前缀的

DFA 。

(3) 构造其SLR 分析表,并判断该文法是否是

SLR(1)文法。

1将文法G(S)拓广为G(S '): S '— S

S — aS

S —bS

S —a

注意到状态I1存在“移进-归纳”冲突,计算S 的FOLLOW 集合: FOLLOW(S)={#}

可以采用SLR 冲突消解法,得到表 5.1所列的SLR 分析表。 从分析表可以看出,表中没有冲突项,所以该文法是SLR(1)文法。

移进归约冲突的解决

以I1为例:可移进 S->a • S 也可归约 S->a • 此时求出以下两个内容:

1、 这个项目集闭包中所有可移进项,即 {S,a,b}

2、 所有可归约项的 FOLLOW 集,即FOLLOW (S ) 若FOLLOW(S)交{S,a,b}为空,则冲突可以解决 (设当前输入符号为 x )若x 属于{S,a,b}则移进 若x 属于FOLLOW ( S )则归约

相关文档
最新文档