编译原理复习题.docx

上传人:b****5 文档编号:6991157 上传时间:2023-01-15 格式:DOCX 页数:41 大小:972.91KB
下载 相关 举报
编译原理复习题.docx_第1页
第1页 / 共41页
编译原理复习题.docx_第2页
第2页 / 共41页
编译原理复习题.docx_第3页
第3页 / 共41页
编译原理复习题.docx_第4页
第4页 / 共41页
编译原理复习题.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

编译原理复习题.docx

《编译原理复习题.docx》由会员分享,可在线阅读,更多相关《编译原理复习题.docx(41页珍藏版)》请在冰豆网上搜索。

编译原理复习题.docx

编译原理复习题

编译原理复习题

一.简答题:

1)什么是句子?

什么是语言?

解答:

句子——设G是一个给定的文法,S是文法的开始符号,如果Sx(其中x∈VT*),则称x是文法的一个句子。

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

或——设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:

L(G)={x│S

x,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)什么是属性文法?

答:

是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。

在语法分析过程中,完成语义规则所描述的动作,从而实现语义处理。

一个属性文法形式的定义为一个三元组AG,AG=(G,V,E)。

其中G为一个上下文无关文法;V为属性的有穷集;E为一组语义规则。

9)语法制导翻译

语法制导翻译:

定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。

语法制导翻译(Syntax-DirectedTranslations):

–一个句子的语义翻译过程与语法分析过程同时进行。

在文法中,文法符号有明确的意义,文法符号之间有确定的语义关系。

属性描述语义信息,语义规则描述属性间的的关系,将语义规则与语法规则相结合,在语法分析的过程中计算语义属性值。

10)词法分析的主要任务是什么?

目标代码

静态数据

解答:

词法分析器的任务是对构成源程序的字符串从左到右逐个字符逐个字符地进行扫描,依次把它们识别为一个一个具有独立意义的单词,并确定其属性,再转换为长度统一的属性字并输出。

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

解答:

一般分为静态区和动态区:

程序代码区、静态数据区、栈区和堆区

 

12)常用的中间语言种类有哪几种?

解答:

常用的中间语言种类有逆波兰表示、三元式、四元式和树形表示。

13)文法G所描述的语言是什么的集合?

解答:

是由文法的开始符号推出的所有终结符串的集合。

或说是句子的集合。

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

其中2型文法叫什么?

解答:

2型文法叫上下文无关文法。

15)常见的动态存贮分配策略有哪两种?

解答:

常见的两种动态存贮分配策略是栈式动态分配策略和堆式动态分配策略。

16)语法分析的任务是什么?

解答:

语法分析的任务是识别给定的终结符串是否为给定文法的句子。

17)局部优化是局限于一个什么范围内的一种优化?

解答:

是局限于一个基本块范围内的一种优化。

18)通常一个编译程序中应包括哪七个部分?

解答:

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

19)代码优化的主要目标是什么?

解答:

代码优化的主要目标是如何提高目标程序的运行速度和如何减少目标程序运行时所需的空间。

20).符号表的组织方式有哪几种?

答:

一个编译程序对符号表的总体组织可有三种选择:

第一种:

把属性种类完全相同的那些符号组织在一起,构造出表项是分别为等长的多个符号表。

这样组织的最大优点是每个符号表的属性个数和结构完全相同。

则表项是等长的,并且表项中的每个属性栏都是有效的,对于单个符号表示来说,这样使得管理方便一致,空间效率高。

但这样组织的主要缺点是一个编译程序将同时管理若干个符号表,增加了总体管理的工作量和复杂度。

而且对各类符号共同属性的管理必须设置重复的运行机制。

使得符号表的管理显得臃肿。

  第二种:

把所有语言中的符号都组织在一张符号表中。

组成一张包括了所有属性的庞大的符号表。

这样组织方式的最大优点是总体管理非常集中单一,且不同种类符号的共同属性可一致地管理和处理。

这样组织所带来的缺点是,由于属性的不同,为完整表达各类符号的全部属性必将出现不等长的表项,以及表项中属性位置的交错重叠的复杂情况,这就极大地增加了符号表管理的复杂度。

为使表项等长且实现属性位置的唯一性,可以把所有符号的可能属性作为符号表项属性。

这种组织方法可能有助于降低符号表管理复杂性,但对某个具体符号,可能增加了无用的属性空间,从而增加了空间开销。

第三种:

折衷方式是根据符号属性相似程度分类组织成若干张表,每张表中记录的符号都有比较多的相同属性。

这种折衷的组织方式在管理复杂性及时空效率方面都取得折衷的效果,并且对复杂性和效率的取舍可由设计者根据自己的经验和要求及目标系统的客观环境和需求进行选择和调整。

21).在整个编译期间,对于符号表的操作有哪些?

答:

在整个编译期间,对于符号表的操作大致可归纳为五类:

·对给定名字,查询此名是否已在表中;

·往表中填入一个新的名字;

·对给定名字,访问它的某些信息;

·对给定名字,往表中填写或更新它的某些信息;

·删除一个或一组无用的项。

22).符号表的作用有哪些?

答:

在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性。

起主要作用是:

①收集符号属性;

②上下文语义的合法性检查的依据;

③作为目标代码生成阶段地址分配的依据。

23).简述优化的原则是什么?

答:

编译程序提供的对代码优化必须遵循的原则是:

(1)等价原则。

经过优化后不应改变程序运行的结果。

(2)有效原则。

使优化后所产生的目标代码运行时间较短,占用的存储空间较小。

(3)合算原则。

应尽可能以较低的代价取得较好的优化效果。

24).简述常用的优化技术有哪些?

答:

编译程序中常用的优化技术有:

删除公共子表示式;复写传播;删除无用代码;代码外提;强度削弱;删除归纳变量;合并常量。

25).何谓优化?

按所涉及的程序范围可分为哪几级优化?

答:

优化:

对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。

 三种级别:

局部优化、循环优化、全局优化。

26)、编译程序目标代码运行时的存储区通常被划分为几部分?

答:

目标代码区、静态数据区、栈区、堆区。

27)、数组的内情向量包含哪些内容?

在编译程序对数组说明进行语义处理时,须把数组的类型type、维数n、各维的上、下界lk,uk等有关信息记录下来。

此外,如果数组是常界的,还可将各维的界差dk以及计算数组元素地址的常量C记录下来。

为了便于引用,通常是把上述信息存放于数组相应的“内情向量”之中.对数组内情向量的访问,可通过数组在符号表中相应登记项的ADDR域以间接寻址方式进行(即将其ADDR域作为指针用于存放内情向量的首地址)。

28)、文法分为几种类型?

其分类依据是什么?

答:

分为四类:

短语文法(0型文法)、前后文有关文法(1型文法)、前后文无关文法(2型文法)、正规文法(3型文法)。

分类依据:

对产生式家约束。

29)、一般来说编译程序至少包含哪几部分?

各部分的作用是什么?

答:

词法分析,语法分析,语义分析和目标代码生成是必须的,代码优化是为了提高目标代码的质量而引入的,不是必须的,没有代码优化编译程序同样生成目标代码。

各部分的作用参见教材

30)、分程序结构的栈式存储管理中的活动记录包括哪些内容?

答:

临时工作单元、局部变量、保存机器状态、存取链、控制链、实参,也称形式单元、返回地址,保存该被调过程返回后的地址。

31)、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗?

为什么?

答:

不正确词法分析,语法分析,语义分析和目标代码生成是必须的,代码优化是为了提高目标代码的质量而引入的,不是必须的,没有代码优化编译程序同样生成目标代码。

二、应用题

1) 写一个文法,使其语言是奇数集,且每个奇数不以0开头。

解:

文法G(N):

        N→AB|B

        A→AC|D

        B→1|3|5|7|9

        D→B|2|4|6|8

        C→0|D  

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

解答:

文法G(N):

      N→L.L|L

      L→LB|B

      B→0|1

3)给出上下文无关文法的定义。

一个上下文无关文法G是一个四元式(VT,VN,S,P),其中:

VT是一个非空有限集,它的每个元素称为终结符号;

VN是一个非空有限集,它的每个元素称为非终结符号,VT∪VN=Φ;

S是一个非终结符号,称为开始符号;

P是一个产生式集合(有限),每个产生式的形式是P→α,其中,P∈VN,α∈(VT∪VN)*。

开始符号S至少必须在某个产生式的左部出现一次。

4).给出正规式与正规集的递归定义。

(1)ε和Φ都是∑上的正规式,它们所表示的正规集分别为{ε}和Φ;

(2)任何a∈∑,a是∑上的一个正规式,它所表示的正规集为{a};

(3)假定U和V都是∑上的正规式,它们所表示的正规集分别记为L(U)和L(V),那么,(U|V)、(U·V)和(U)*也都是正规式,它们所表示的正规集分别为L(U)∪L(V)、L(U)L(V)(连接积)和(L(U))*(闭包)。

仅由有限次使用上述三步骤而得到的表达式才是∑上的正规式。

仅由这些正规式所表示的字集才是∑上的正规集。

5).设文法G为:

S→aAcB|BdS

A→BaB|aBc|a

B→aScA|cAB|b

对于输入串aacabccb,给出最左推导。

答:

S=>aAcB=>aaBccB=>aacABccB=>aacaBccB=>aacabccB=>aacabccb

6)设文法G为:

S→BA

A→BS|d

B→aA|bS|c

对于输入串adccd,给出最左推导。

答:

S=>BA=>aAA=>adA=>adBS=>adcS=>adcBA=>adccA=>adccd

7).给定正规文法G:

S→aS|bA|b

A→aS

请构造与之等价的有限自动机。

 

8).给定正规文法G:

S→aA

A→bA|aB|b

B→aA

请构造与之等价的有限自动机。

 

9).对下面给出的NFA确定化。

 

10).将文法G[S]改写为等价的G′[S],使G′[S]不含左递归和左公共因子。

  G[S]:

S→bSAe|bA

     A→Ab|d

答:

文法G[S]改写为等价的不含左递归和左公共因子的G'[S]为:

  S→bB

  B→SAe|A

  A→dA'

A'→bA'|ε

11)消除下列文法G[A]的左递归。

A→AaB∣B

B→BbC∣C

C→eD∣D

D→(A)∣d

解答:

消除文法G[A]的左递归后得到:

A→BAˊ

Aˊ→aBAˊ∣ε

B→CBˊ

Bˊ→bcBˊ∣ε

C→eD∣D

D→(A)∣d

12)正规式(a|b)*a(a|b)构造一个等价的有限自动机。

解答:

 

13)将下图的NFA确定化为DFA。

答:

用子集法确定化如下表

I

Ia

Ib

状态

{X,1,2}

{1,2}..

{1,2,3}

{1,2,Y}

{1,2}..

{1,2}..

{1,2,Y}

{1,2}..

{1,2,3}

{1,2,3}

{1,2,3}

{1,2,3}

X

1

2

3

确定化后如下图:

14).已知文法G(E)

E→T|E+T

T→F|T*F

F→(E)|i

(1)给出句型(T*F+i)的最右推导;

(2)给出句型(T*F+i)的短语、简单短语、句柄、素短语、最左素短语。

解:

(1)最右推导:

E->T->F->(E)->(E+T)->(E+F)->(E+i)->(T+i)->(T*F+i)

(2)短语:

(T*F+i),T*F+i,T*F,i

简单短语:

T*F,i

句柄:

T*F

素短语:

T*F,i

最左素短语:

T*F

15).构造正规式1(0|1)*101相应的DFA。

解:

先构造NFA:

 

确定化:

 

重新命名,令AB为B、AC为C、ABY为D得:

 

所以,可得DFA为:

 

16).文法:

S->MH|a

H->LSo|ε

K->dML|ε

L->eHf

M->K|bLM

判断G是否为LL

(1)文法,如果是,构造LL

(1)分析表。

解:

各符号的FIRST集和FOLLOW集为:

 

预测分析表

 

由于预测分析表中无多重入口,所以可判定文法是LL

(1)的

17).对下面的文法G:

E->TE'

E'->+E|ε

T->FT'

T'->T|ε

F->PF'

F'->*F'|ε

P->(E)|a|b|^

(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。

(4分)

(2)证明这个方法是LL

(1)的。

(4分)

(3)构造它的预测分析表。

(2分)

解:

(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。

FIRST集合有:

FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^};

FIRST(E')={+,ε}

FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^};

FIRST(T')=FIRST(T)U{ε}={(,a,b,^,ε};

FIRST(F)=FIRST(P)={(,a,b,^};

FIRST(F')=FIRST(P)={*,ε};

FIRST(P)={(,a,b,^};

FOLLOW集合有:

FOLLOW(E)={),#};

FOLLOW(E')=FOLLOW(E)={),#};FOLLOW(T)=FIRST(E')UFOLLOW(E)={+,),#};//不包含ε

FOLLOW(T')=FOLLOW(T)=FIRST(E')UFOLLOW(E)={+,),#};FOLLOW(F)=FIRST(T')UFOLLOW(T)={(,a,b,^,+,),#};//不包含ε

FOLLOW(F')=FOLLOW(F)=FIRST(T')UFOLLOW(T)={(,a,b,^,+,),#};FOLLOW(P)=FIRST(F')UFOLLOW(F)={*,(,a,b,^,+,),#};//不包含ε

(2)证明这个方法是LL

(1)的。

各产生式的SELECT集合有:

E->TE':

FIRST(T)={(,a,b,^};

E'->+E:

FIRST(+E)={+};

E'->ε:

FOLLOW(E')={),#}

T->FT':

FIRST(F)={(,a,b,^};

T'->T:

FIRST(T)={(,a,b,^};

T'->ε:

FOLLOW(T/)={+,),#};

F->PF':

FIRST(P)={(,a,b,^};

F'->*F':

FIRST(*F)={*};

F'->ε:

FOLLOW(F')={(,a,b,^,+,),#};

P->(E)FIRST((E))={(}

P->aFIRST(a)={a}

P->bFIRST(b)={b}

P->^FIRST(^)={^}

可见,相同左部产生式若不能推出为空,其产生式右部的交集均为空,

相同左部产生式,若其中有一个能推出为空,其不能推出为空的产生式右部FIRST集合和左部的FOLLOW交集均为空,所以文法G[E]是LL

(1)文法。

(3)构造它的预测分析表。

文法G[E]的预测分析表如下:

 

18).设有文法G:

S→S*F|F

F→F↑P|P

P→(S)|i

⑴完成下列算符优先关系表,并判断是否为算符优先文法(请说明理由)。

*

i

#

*

·>

<·

<·

·>

<·

·>

·>

·>

<·

·>

<·

·>

<·

<·

<·

<·

·>

·>

·>

·>

i

·>

·>

·>

·>

#

<·

<·

<·

<·

由于该文法的任何产生的右部都不含两个相继的非终结符,故属于算符文法。

从上表可以看出,任何两个终结符之间至少满足=、<·、·>三种关系之一,故G为算符优先文法。

⑵给出句型S*P↑(S)对应的语法树,指出该句型的短语、句柄

 

短语:

S*P↑(S)P↑(S)P(S)

句柄:

P

 

19)已知文法G(S)

    S→T|S-T

    T→F|T/F

  F→(S)|i 

(1)给出句型T/F-i的最右推导;

(2)画出句型T/F-i规范规约的语法树及算符优先分析规约的语法树框架;

(3)给出句型T/F-i的短语、素短语。

答:

(1)最右推导:

E→T→F→(E)→(E+T)→(E+F)→(E+i)→(T+i)→(T*F+i)

(2)略

(3)短语:

(T*F+i),T*F+i,T*F,i  

素短语:

T*F,i           

20)某语言的拓广文法G′为:

  (0)S′→S

  

(1)S→Db|B

  

(2)D→d|ε

  (3)B→Ba|ε

证明G不是LR(0)文法而是SLR

(1)文法,请给出SLR

(1)分析表。

答:

拓广文法G',增加产生式S'→S

在项目集I0中:

有移进项目D→·d

归约项目D→·和B→·

存在移进-归约和归约-归约冲突,所以G不是LR(0)文法。

若产生式排序为:

(0)S'→S

(1)S→Db

(2)S→B

(3)D→d

(4)D→ε

(5)B→Ba

(6)B→ε

G′的LR(0)项目集族及识别活前缀的DFA如下图:

由产生式知

Follow(S)={#}

Follow(D)={b}

Follow(B)={a,#}

在I0中:

Follow(D)∩{d}={b}∩{d}=

Follow(B)∩{d}={a,#}∩{d}=

Follow(D)∩Follow(B)={b}∩{a,#}=

在I3中:

Follow(S)∩{a}={#}∩{a}=

所以在I0,I3中的移进-归约和归约-归约冲突可以由Follow集解决,所以G是SLR

(1)文法,

构造的SLR

(1)分析表如下表:

状态

ACTION

GOTO

b

d

a

#

S

D

B

0

r4

S4

r6

r6

1

2

3

1

 

 

 

acc

 

 

 

2

S5

 

 

 

 

 

 

3

 

 

S6

r2

 

 

 

4

r3

 

 

 

 

 

 

5

 

 

 

r1

 

 

 

6

 

 

r5

r5

 

 

 

21)、下面文法G为:

(0)E’E

(1)ErB

(2)BB;d

(3)Bd

判断G是SLR

(1)还是LR

(1),说明理由,并构造相应的分析表

 

状态I3中含项目:

E→rB·为归约项目

B→B·;i为移进项目

所以不是LR(0)文法

FOLLOW(S)={#}FOLLOW(S)∩{:

}为空,所以该文法是SLR

(1)文法。

状态

ACTION

GOTO

r

;

d

#

E

B

0

S2

1

1

acc

2

S4

3

3

S5

r1

4

r3

r3

5

S6

6

r2

r2

 

22)、设文法G(S):

    S→(F)|dS|d

    F→F;S|S

  

(1)消除左递归和回溯;

(2)列出第一小题完成后的文法,并计算每个非终结符的FIRST和FOLLOW;

  (3)构造预测分析表。

 

 解:

(1) S→(F)S→dS’  S’→SS’→ε2分

    F→SF’  F’→,SF’F’→ε2分

     评分细则:

消除左递归2分,提公共因子2分。

 

(2)FIRST(S)={(,d}  FOLLOW(S)={#,,,)}

    FIRST(S’)={d,ε}  FOLLOW(S’)={#,,,)}

   FIRST(L)={(,d}  FOLLOW(L)={)}

    FIRST(L’)={,,ε}  FOLLOW(L’〕={)}3分

因为:

FIRST(S→(F))∩FIRST(S→dS)=∧

FIRST(S’→S)∩FOLLOW(S’→ε)=∧

FIRST(F’→,SF’)∩FIRST(F’→ε)=∧

所以,此文法是LL

(1)文法

(4)预测分析表

d

#

S

→dS

→(F)

S’

→S

→ε

→S

→ε

→ε

F

→SF’

→SF’

F’

→,SF’

→ε

23).设有基本块:

(1)a:

=b-c(6)c:

=b-f

(2)d:

=a+4(7)b:

=b-c

(3)e:

=a-b(8)f:

=b+f

(4)f:

=a+4(9)a:

=a-f

(5)b:

=b+c

(1)画出DAG图;

(2)假设基本块出口时只有a,b还被引用,请写出优化后的三地址代码序列。

解答:

(1)给出DAG如右:

(2)重写三地址代码如下:

a:

=b-c

d:

=a+4

e:

=a-b

f:

=d

b:

=b+c

c:

=b-f

b:

=b-c

f:

=b+f

a:

=a-f

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1