整理完编译原理网上作业题参考答案1101.docx

上传人:b****6 文档编号:5150218 上传时间:2022-12-13 格式:DOCX 页数:32 大小:288.56KB
下载 相关 举报
整理完编译原理网上作业题参考答案1101.docx_第1页
第1页 / 共32页
整理完编译原理网上作业题参考答案1101.docx_第2页
第2页 / 共32页
整理完编译原理网上作业题参考答案1101.docx_第3页
第3页 / 共32页
整理完编译原理网上作业题参考答案1101.docx_第4页
第4页 / 共32页
整理完编译原理网上作业题参考答案1101.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

整理完编译原理网上作业题参考答案1101.docx

《整理完编译原理网上作业题参考答案1101.docx》由会员分享,可在线阅读,更多相关《整理完编译原理网上作业题参考答案1101.docx(32页珍藏版)》请在冰豆网上搜索。

整理完编译原理网上作业题参考答案1101.docx

整理完编译原理网上作业题参考答案1101

东北农业大学网络教育学院

编译原理作业题参考答案

第一章编译概述

多项选择题:

1.编译程序各阶段的工作都涉与到(BC)。

(﹡﹡)

A.语法分析B.表格管理C.出错处理D.语义分析E.词法分析

2.编译程序工作时,通常有(ABCE)阶段。

 (﹡)

A.词法分析B.语法分析C.中间代码生成D.语义检查E.目标代码生成

填空题:

1.解释程序和编译程序的区别在于(是否生成目标程序)。

(﹡)

2.编译过程通常可分为5个阶段,分别是(词法分析)、(语法分析)、(中间代码生成)、(代码优化)和(目标代码)生成。

(﹡)

3.编译程序工作过程中,第一段输入是(源程序),最后阶段的输出为(目标代码生成)程序。

(﹡)

4.编译程序是指将(高级语言编写的)程序翻译成(目标语言)程序的程序。

(﹡)

综合题:

1.画出编译程序的总体结构图,简述各部分的主要功能。

(﹡﹡﹡)

解答:

编译程序的总体结构如下图所示:

词法分析程序:

输入源程序,进行词法分析,输出单词符号。

语法分析程序:

在词法分析的基础上,根据语言的语法规则(方法规则)把单词符号串分解成各类语法单位,并判断输入串是否构成语法上正确的“程序”。

中间代码生成程序:

按照语义规则把语法分析程序归约(或推导)出的语法单位翻译成一定形式的中间代码,比如说四元式。

优化程序:

对中间代码进行优化处理。

目标代码生成程序:

把中间代码翻译成目标语言程序。

表格管理模块保存一系列的表格,登记源程序的各类信息和编译各阶段的进展情况。

编译程序各阶段所产生的中间结果都记录在表格中,所需信息多数都需从表格中获取,整个编译过程中都在不断地和表格打交道。

出错处理程序对出现在源程序中的错误进行处理。

此外,编译的各个阶段都可能出现错误。

出错处理程序对发现的错误都与时进行处理。

第二章文法和语言的基本知识

多项选择题:

1.ABC2.ACE3.BCD4.AC5.BC

 填空题:

1.文法中的终结符和非终结符的交集是(空集)。

词法分析器交给语法分析器的文法符号一定是(终结符),它一定只出现在产生式的(右)部。

(﹡)

2.最左推导是指每次都对句型中的(最左)非终结符进行扩展。

(﹡)

3.在语法分析中,最常见的两种方法一定是(自上而上)分析法,另一是(自下而上)分析法。

(﹡)

4.采用(自上而下)语法分析时,必须消除文法的左递归。

(﹡)

5.(语法)树代表推导过程,(分析)树代表归约过程。

(﹡)

6.自下而上分析法采用(移进)、归约、错误处理、(接受)等四种操作。

(﹡﹡)

7.Chomsky把文法分为(4)种类型,编译器构造中采用(2型)和(3型)文法,它们分别产生(上下文无关语言)和(正规语言)语言,并分别用(下推自动机)和(有限)自动机识别所产生的语言。

(﹡﹡)

判断题:

 

1.正确2.错误3.错误4.错误5.错误

6.错误7.正确8.正确9.错误

简答题

1句柄:

(﹡)

解答:

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

2.素短语:

(﹡﹡)

解答:

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

3.语法树:

(﹡﹡)

解答:

满足下面4个条件的树称之为文法G[S]的一棵语法树。

①每一终结均有一标记,此标记为VN∪VT中的一个符号;

②树的根结点以文法G[S]的开始符S标记;

③若一结点至少有一个直接后继,则此结点上的标记为VN中的一个符号;

④若一个以A为标记的结点有K个直接后继,且按从左至右的顺序,这些结点的标记分别为X1,X2,…,Xk,则A→X1,X2,…,Xk,必然是G的一个产生式。

4.归约:

(﹡﹡)

解答:

我们称αγβ直接归约出αAβ,仅当A→γ是一个产生式,且α、β∈(VN∪VT)*。

归约过程就是从输入串开始,反复用产生式右部的符号替换成产生式左部符号,直至文法开始符。

5.推导:

(﹡﹡)

解答:

我们称αAβ直接推出αγβ,即αAβTαγβ,仅当A→γ是一个产生式,且α、β∈(VN∪VT)*。

如果α1α2…αn,则我们称这个序列是从α1至α2的一个推导。

若存在一个从α1αn的推导,则称α1可推导出αn。

推导是归约的逆过程。

问答题

1.给出上下文无关文法的定义。

(﹡﹡)

解答:

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

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

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

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

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

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

2.文法G[S]:

       S→aSPQ|abQ

       QP→PQ

       bP→bb

       bQ→bc

       cQ→cc

   

(1)它是Chomsky哪一型文法?

   

(2)它生成的语言是什么?

(﹡﹡﹡)

解答:

  

(1)由于产生式左部存在终结符号,且所有产生式左部符号的长度均小于等于产生式右部的符号长度,所以文法G[S]是Chomsky1型文法,即上下文有关文法。

  

(2)按产生式出现的顺序规定优先级由高到低(否则无法推出句子),我们可以得到:

   SabQabc

   SaSPQaabQPQaabPaabbaabbcQaabbcc

   SaSPQaaSPQPQaaabQPQPQaaabPPQaaabPQPaaaPPQaaabbPqaaabbQaaabbbcaaabbbccQaaabbbccc

   ……

  于是得到文法G[S]生成的语言L={anbncn|n≥1}

3.按指定类型,给出语言的文法。

   L={aibj|j>i≥1}的上下文无关文法。

(﹡﹡)

解答:

  由L={aibj|j>i≥1}知,所求该语言对应的上下文无关文法首先应有S→aSb型产生式,以保证b的个数不少于a的个数;其次,还需有S→Sb或S→bS型的产生式,用以保证b的个数多于a的个数;也即所求上下文无关文法G[S]为:

  G[S]:

S→aSb|Sb|b

4.有文法G:

S→aAcB|Bd

        A→AaB|c

        B→bScA|b

   

(1)试求句型aAaBcbbdcc和aAcbBdcc的句柄;

   

(2)写出句子acabcbbdcc的最左推导过程。

(﹡﹡﹡)

解答:

  

(1)分别画出对应两句型的语法树,如下图所示

  句柄:

AaB Bd

图语法树

  

(2)句子acabcbbdcc的最左推导如下:

  STaAcBaAaBcBacaBcBacabcBacabcbScAacabcbBdcAacabcbbdcAacabcbbdcc

5.对于文法G[S]:

     S→(L)|aS|a

L→L,S|S

   

(1)画出句型(S,(a))的语法树。

   

(2)写出上述句型的所有短语、直接短语、句柄和素短语。

(﹡﹡﹡)

解答:

  

(1)句型(S,(a))的语法树如下图所示。

 图 句型(S,(a))的语法树

  

(2)由上图可知:

  ①短语:

S、a、(a)、S,(a)、(S,(a));

  ②直接短语:

a、S;

  ③句柄:

S;

  ④素短语:

素短语可由图2-8-3中相邻终结符之间的优先关系求得,即;

  因此素短语为a。

6.考虑文法G[S],其产生式如下:

S→(L)|a

L→L,S|S

(a)试指出此文法的终结符号、非终结符号。

(b)给出句子(a,(a,a))的分析树。

(c)构造句子(a,(a,a))的一个最左推导。

(d)构造句子(a,(a,a))的一个最右推导。

(e)这个文法生成的语言是什么?

(﹡﹡)

解答:

(a)终结符号为:

{(,),a,,,}

   非终结符号为:

{S,L}

   开始符号为:

S

(b)分析树

(c)   S(L)(L,S)(S,S)(a,S)(a,(L)(a,(L,S))

    (a,(S,S))(a,(a,S))(a,(a,a))

(d)S(L)(L,S)(L,(L))(L,(L,S))(L,(L,a))

    (L,(S,a))(L,(a,a))(S,(a,a))(a,(a,a))

(e)L(G[S])=(α1,α2,...,αn)或a

   其中αi(1≤i≤n)是L(G[S])。

即L(G[S])产生一个以a为原子的纯表,但不包括空表。

7.考虑文法G[T]:

    T→T*F|F

    F→F↑P|P

    P→(T)|i

   证明T*P↑(T*F)是该文法的一个句型,并指出直接短语和句柄。

(﹡﹡)

解答:

  首先构造T*P↑(T*F)的语法树如下图所示。

图句型T*P↑(T*F)的语法树

  由上图可知,T*P↑(T*F)是文法G[T]的一个句型。

  直接短语有两个,即P和T*F;句柄为P。

8.试描述下列文法产生的语言L(G[S])(﹡﹡)

    S→10S0|aA

    A→bA|a

解答:

L(G)={(10)iabna0i n≥0i≥0}

9.已知语言L(G)={abnc |n≥1}试对该语言构造相应文法。

(﹡﹡)

解答:

G[Z]:

   Z→aBC

   B→Bb|b 

10.证明下列文法的二义性(﹡﹡﹡)

    1.G[Z]      2.G[S]

     Z→aZbZ|aZ|a    S→AB

               A→bB|bC|ba

               B→Sb|ba|a

               C→Bb|b

解答:

(1)

 

  对于句子aaaba,画出二棵不同的语法树,因而是二义的。

(2)

     G[S]  

 

对于句子baba,画出二棵不同的语法树,因而是二义的。

11.有文法G[S]:

S→iSeS|iS|i

  该文法是否是二义的。

试证明之。

(﹡﹡)

解答:

对于句子iiiei,有两棵不同的语法树,故文法是二义的。

12.文法G[T]:

T→aR,R→Tb|d生成的语言是什么?

G[T]是否为3型文法?

(﹡﹡)

解答:

不是3型文法。

13.试写出能够描述下列格式的文法。

(﹡﹡)

67391742

2

解答:

文法产生式规则如下:

<>→<局代码><本机码>

<>→<区前缀><局代码><本机码>

<区前缀>→<地区码>‘-’

<区前缀>→‘(’<地区码>‘)’

<地区码>→DIGDIG

<地区码>→DIGDIGDIG

<局代码>→DIGDIGDIGDIG

<本机码>→DIGDIGDIGDIG

14.试构造生成语言的上下文无关文法。

(﹡﹡﹡)

(1){anbnci|n≥1,i≥0}

(2){w|w∈{a,b}+,且w中a的个数恰好比b多1}

解答:

(1)把anbnci分成anbn和ci两部分,分别由两个非终结符号生成,因此,生成此文法的产生式为:

S→AB

A→aAb|ab

B→cB|ε

(2)令S为开始符号,产生的w中a的个数恰好比b多一个,令E为一个非终结符号,产生含相同个数的a和b的所有串,则产生式如下:

S→aE|Ea|bSS|SbS|SSb

E→aEbE|bEaE|ε

15.下面的二义性文法描述命题演算公式,为它写一个等价的非二义性文法。

G[S]:

S->SANDS|SORS|NOTS|p|q|(S)(﹡﹡)

解答:

G[S]:

S->SANDA|A

A->AORB|B

B->NOTB|p|q|(S)

16.对于下列语言分别写出它们的正规表达式。

(﹡﹡)

(1) 英文字母组成的所有符号串,要求符号串中顺序包含五个元音。

(2) 英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列。

解答:

(1) 令Letter表示除这五个元音外的其它字母。

((letter)*A(letter)*E(letter)*I(letter)*O(letter)*U(letter))*

(2) A*B*....Z*

第三章词法分析与有穷自动机

多项选择题:

1.ACE2.ABD

填空题:

1.确定有限自动机DFA是(NFA)的一个特例。

(﹡)

2.若二个正规式所表示的(正规集)相同,则认为二者是等价的。

(﹡)

3.一个字集是正规的,当且仅当它可由(DFA/NFA)所(识别)。

(﹡)

判断题:

1.错误2.错误3.错误4.正确5.正确

6.正确7.正确8.正确9.错误10.正确

综合题:

1.设M=({x,y},{a,b},f,x,{y})为一非确定的有限自动机,其中f定义如下:

  f(x,a)={x,y} f(a,b)={y}

  f(y,a)=φ  f(y,b)={x,y}

  试构造相应的确定有限自动机M′。

(﹡﹡)

解答:

对照自动机的定义M=(S,Σ,f,S0,Z),由f的定义可知f(x,a)、f(y,b)均为多值函数,所以是一非确定有限自动机,先画出NFAM相应的状态图,如图下所示。

图 NFAM

  用子集法构造状态转换矩阵下表所示。

  将转换矩阵中的所有子集重新命名而形成下表所示的状态转换矩阵。

 

表状态转换矩阵

  即得到M′=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如下图所示。

  将上图的DFAM′最小化。

首先,将M′的状态分成终态组{1,2}与非终态组{0};其次,考察{1,2}。

由于{1,2}a={1,2}b={2}{1,2},所以不再将其划分了,也即整个划分只有两组{0},{1,2}:

令状态1代表{1,2},即把原来到达2的弧都导向1,并删除状态2。

最后,得到如下图所示化简DFAM′。

图 化简后的DFAM′

2.对给定正规式b*(d|ad)(b|ab)+,构造其NFAM。

(﹡﹡)

解答:

首先用A+=AA*改造正规式得:

b*(d|ad)(b|ab)(b|ab)*;其次,构造该正规式的NFAM,如下图所示。

图NFAM

3.字母表{a,b}上的正规式R=(ba|a)*,构造R的相应DFA。

(﹡﹡)

解答:

I

Ia

Ib

x1y

1y

2

1y

1y

2

2

1y

 

I

Ia

Ib

1

2

3

2

2

3

3

2

 

4.请写出在∑=(a,b)上,不是a开头的,但以aa结尾的字符串集合的正规表达式,并构造与之等价状态最少的DFA。

(﹡﹡﹡)

解答:

根据题意,不以a开头就意味着以b开头,且以aa结尾的正规式为:

b(a|b)*aa

  根将图1所示的NFA确定化,如图2所示。

 

 NFA将图1所示的NFA确定化,如图

  从图2可知已为最简状态,由于开始状态0只能输入字符b而不能与状态1合并,而状态2和状态3面对输入符号的下一状态相同,但两者一为非终态、一为终态,故也不有合并,故图2所示的状态转换矩阵已是最简的DFA,如图3所示据正规式画出NFA,如图1所示。

       图2 状态转换矩阵

 

           图3 最简DFA

5.人运狼、羊、菜过河,一次运一件,不让羊吃掉菜,也不让狼吃掉羊,画出渡河的状态转换图。

可否将其抽象为一个有限自动机。

(﹡﹡﹡)

解答:

先写出渡河的方法,串中对象顺序为人来回渡河时所运的货物的顺序:

①羊空菜羊狼空羊

②羊空狼羊菜空羊

现给出一个NFA:

M=(Σ,Q,0,{9},δ)

其中Σ={羊,空,菜,狼}

Q={0,1,2,3,4,5,6,7,8,9}

转形函数

δ(0,羊)=1,  δ(1,空)=2,  δ(2,菜)=3,  δ(2,狼)=5

δ(3,羊)=4,  δ(5,羊)=6,  δ(4,狼)=7,  δ(6,菜)=7

δ(7,空)=8,  δ(8,羊)=9

6.对于正规表达式(a|b)*a(a|b)构造最小状态的DFA。

(﹡﹡)

解答:

①NFAM:

②DFAM:

③化简:

  ②中的DFAM中没有等价状态,因此为最小化的DFAM。

 

第四章语法分析

多项选择题:

1.AD2.CE3.ACDE4.CE5.ABCE6.ACDE

填空题:

1.对于一个文法,如果能够构造(LR(0)文法)。

使得它的(每个入口)均是唯一确定的,则称该文法为LR文法。

(﹡)

2.字的前缀是指该字的(任意首部)。

(﹡)

3.活前缀是指(规句型)的一个前缀,这种前缀不含(句柄)之后的任何符号。

(﹡)

4.在LR分析过程中,只要(输入串)的已扫描部分保持可归约成一个(活前缀),则扫描过的部分正确。

(﹡)

5.将识别(活前缀)的NFA确定化,使其成为以(项目集合)为状态的DFA,这个DFA就是建立(LR分析算法)的基础。

(﹡﹡)

6.A→α·称为(归约)项目;对文法开始符S′→α·为(接受)项目;若a为终结符,则称A→α·aβ为(移进)项目;若B为非终结符,则称A→α·aβ为(待约)项目。

(﹡﹡)

7.LR(0)分析法的名字中“L”表示(自左至右分析),“R”表示(采用最右推导的逆过程即最左归约),“0”表示(向右查看0个字符)。

(﹡﹡)

判断题:

1.正确

简答题:

综合题:

1.构造下面文法的LL

(1)分析表。

(﹡﹡﹡)

    D→TL

    T→int|real

    L→idR

    R→,idR|ε

解答:

LL

(1)分析表见下表。

分析 虽然这个文法很简单,我们还是从求开始符号集合和后继符号集合开始。

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

={#}

  FIRST(L)={id}          FOLLOW(T)={id}

  FIRST(R)={,,ε}        FOLLOW(R)={#}

  有了上面每个非终结符的FIRST集合,填分析表时要计算一个产生式右部α的FIRST(α)就不是件难事了。

  填表时唯一要小心的时,ε是产生式R→ε右部的一个开始符号,而#在FOLLOW(R)中,所以R→ε填在输入符号#的栏目中。

表 LL

(1)分析表

2.下面文法G[S]是否为LL

(1)文法?

说明理由。

(﹡﹡)

   S→AB|PQx  A→xy  B→bc

   P→dP|ε  Q→aQ|ε

解答:

该文法不是LL

(1)文法,见下面分析中的说明。

分析 只有三个非终结符有两个选择。

  

(1)P的两个右部dP和ε的开始符号肯定不相交。

  

(2)Q的两个右部aQ和ε的开始符号肯定不相交。

  (3)对S来说,由于x∈FIRST(AB),同时也有x∈FIRST(PQx)(因为P和Q都可能为空)。

所以该文法不是LL

(1)文法。

3.设有以下文法:

(﹡﹡﹡)

    G[S]:

S→aAbDe|d

    A→BSD|e

    B→SAc|cD|ε

    D→Se|ε

   

(1)求出该文法的每一个非终结符U的FOLLOW集。

   

(2)该文法是LL

(1)文法吗?

   (3)构造C[S]的LL

(1)分析表。

解答:

(1)求文法的每一个非终结符U的FOLLOW集的过程如下:

  因为:

①S是识别符号,且有A→BSD、B→SAc、D→Se,所以FOLLOW(S)应包含

  FIRST(D)∪FIRST(Ac)∪FIRST(e)∪{#}

  ={a,d}∪{a,d,c,e}∪{e}∪{#}

  ={a,c,d,e#}

②又因为A→BSD和D→ε,所以FOLLOW中还包含FOLLOW(A)。

  因为S→aAbDe和B→SAc,所以

FOLLOW(A)=FIRST(bDe)∪FIRST(c)={b,c}

  综合①、②得FOLLOW(S)={a,d,c,e,#}∪{a,b,c,d,e,#}

  因为A→BSD,所以FOLLOW(B)=FIRST(SD)={a,d}

  因为S→aAbDe|d、A→BSD|e和B→SAc|cD,所以

FOLLOW(D)=FIRST(e)∪FOLLOW(A)∪FOLLOW(B)

       ={e}∪{b,c}∪{a,d}={a,b,c,d,e}

  

(2)G[S]不是LL

(1)文法。

  因为产生式B→SAc|cD|ε中

  FIRST(SAc)∩FOLLOW(B)={a,d}≠

  (3)构造G[S]的LL

(1)分析表。

  按照LL

(1)分析表的构造算法构造方法G[S]的LL

(1)分析表如下表所示。

表 G[S]的LL

(1)分析表

4.将文法G[V]改造成为LL

(1)的。

(﹡﹡﹡)

    G[V]:

V→N|N[E]

       E→V|V+E

       N→i

解答:

对文法G[V]提取公共左因子后得到文法:

   G′[V]:

V→NA

       A→ε|[E]

       E→VB

       B→ε|+E

       N→i

  求出文法G′[V]中每一个非终结符号的FIRST集:

    FIRST(V)={i} FIRST(A)={[,ε}

    FIRST(E)={i} FIRST(B)={+,ε}

    FIRST(N)={i}

  求出文法G′[V]中每一个非终结符号的FOLLOW集:

    FOLLOW(V)={#}∪FIRST(B)\{ε}∪FOLLOW(E)={#,+,]}

    FOLLOW(A)=FOLLOW(V)={+,,#}

    FOLLOW(E)=FIRST(])\{ε}∪FOLLOW(B)=FIRST(])\{ε}∪FOLLOW(E)={]}

    FOLLOW(B)=FOLLOW(E)={]}

    FOLLOW(N)=FIRST(A)\{ε}∪FOLLOW(V)={[,],+,#}

  可以看到,对文法G′[V]的产生式A→ε|[E],有

    FIRST([E])∩FOLLOW(A)={[}∩{+,],#}=

  对产生式B→ε|+E,有

    FIRST(+E)∩FOLLOW(B)={+}∩{]}=

  而文法的其他产生式都只有一个不为ε的右部,所以文法G′[V]是LL

(1)文法。

5.已知文法:

(﹡﹡﹡)

   G[A]:

A→aAa|ε

   

(1)该文法是LL

(1)文法吗?

为什么?

   

(2)若采用LL

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

(1)分析表?

   (3)若输入符号串“aaaa”,请给出语法分析过程。

解答:

(1)因为产生式A→aAa|ε有空产生式右部,而

    FOLLOW(A)={#}∪FIRST(a)={a,#}

  造成FIRST(A)∩FOLLOW(A)={A,ε}∩{a,#}≠

  所以该文法不是LL

(1)文法。

  

(2)若采用LL

(1)方法进行语法分析,必须修改该文法。

  因该文法产

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

当前位置:首页 > 高等教育 > 艺术

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

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