编译原理-龙书答案.doc

上传人:b****9 文档编号:98891 上传时间:2022-10-03 格式:DOC 页数:24 大小:458.50KB
下载 相关 举报
编译原理-龙书答案.doc_第1页
第1页 / 共24页
编译原理-龙书答案.doc_第2页
第2页 / 共24页
编译原理-龙书答案.doc_第3页
第3页 / 共24页
编译原理-龙书答案.doc_第4页
第4页 / 共24页
编译原理-龙书答案.doc_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

编译原理-龙书答案.doc

《编译原理-龙书答案.doc》由会员分享,可在线阅读,更多相关《编译原理-龙书答案.doc(24页珍藏版)》请在冰豆网上搜索。

编译原理-龙书答案.doc

第四章部分习题解答

Aho:

《编译原理技术与工具》书中习题

(Aho)4.1考虑文法

S→(L)|a

L→L,S|S

a)列出终结符、非终结符和开始符号

解:

终结符:

(、)、a、,

非终结符:

S、L

开始符号:

S

b)给出下列句子的语法树

i)(a,a)

ii)(a,(a,a))

iii)(a,((a,a),(a,a)))

c)构造b)中句子的最左推导

i)SÞ(L)Þ(L,S)Þ(S,S)Þ(a,S)Þ(a,a)

ii)SÞ(L)Þ(L,S)Þ(S,S)Þ(a,S)Þ(a,(L))Þ(a,(L,S))Þ(a,(S,S))Þ(a,(a,S)Þ(a,(a,a))

iii)SÞ(L)Þ(L,S)Þ(S,S)Þ(a,S)Þ(a,(L))Þ(a,(L,S))Þ(a,(S,S))Þ(a,((L),S))Þ(a,((L,S),S))Þ(a,((S,S),S))Þ(a,((a,S),S))Þ(a,((a,a),S))Þ(a,((a,a),(L)))Þ(a,((a,a),(L,S)))Þ(a,((a,a),(S,S)))Þ(a,((a,a),(a,S)))Þ(a,((a,a),(a,a)))

d)构造b)中句子的最右推导

i)SÞ(L)Þ(L,S)Þ(L,a)Þ(S,a)Þ(a,a)

ii)SÞ(L)Þ(L,S)Þ(L,(L))Þ(L,(L,S))Þ(L,(L,a))Þ(L,(S,a))Þ(L,(a,a))Þ(S,(a,a))Þ(a,(a,a))

iii)SÞ(L)Þ(L,S)Þ(L,(L))Þ(L,(L,S))Þ(L,(L,(L)))Þ(L,(L,(L,S)))Þ(L,(L,(L,a)))Þ(L,(L,(S,a)))Þ(L,(L,(a,a)))Þ(L,(S,(a,a)))Þ(L,((L),(a,a)))Þ(L,((L,S),(a,a)))Þ(L,((L,a),(a,a)))Þ(L,((S,a),(a,a)))Þ(L,((a,a),(S,S)))Þ(S,((a,a),(a,a)))Þ(a,((a,a),(a,a)))

e)该文法产生的语言是什么

解:

设该文法产生语言(符号串集合)L,则

L={(A1,A2,…,An)|n是任意正整数,Ai=a,或Ai∈L,i是1~n之间的整数}

(Aho)4.2考虑文法

S→aSbS|bSaS|e

a)为句子构造两个不同的最左推导,以证明它是二义性的

SÞaSbSÞabSÞabaSbSÞababSÞabab

SÞaSbSÞabSaSbSÞabaSbSÞababSÞabab

b)构造abab对应的最右推导

SÞaSbSÞaSbaSbSÞaSbaSbÞaSbabÞabab

SÞaSbSÞaSbÞabSaSbÞabSabÞabab

c)构造abab对应语法树

d)该文法产生什么样的语言?

解:

生成的语言:

a、b个数相等的a、b串的集合

(Aho)4.3考虑文法

bexpr→bexprorbterm|bterm

bterm→btermandbfactor|bfactor

bfactor→notbfactor|(bexpr)|true|false

a)试为句子not(trueorfalse)构造分析树

解:

b)试证明该文法产生所有布尔表达式

证明:

一、首先证明文法产生的所有符号串都是布尔表达式

变换命题形式——以bexpr、bterm、bfactor开始的推导得到的所有符号串都是布尔表达式

最短的推导过程得到true、false,显然成立

假定对步数小于n的推导命题都成立

考虑步数等于n的推导,其开始推导步骤必为以下情况之一

bexprÞbexprorbterm

bexprÞbterm

btermÞbtermandbfactor

bexprÞbfactor

bfactorÞnotbfactor

bfactorÞ(bexpr)

而后继推导的步数显然

因此命题一得证。

二、证明所有布尔表达式均可由文法生成

变换命题——所有析取式均可由bexpr推导出来,所有合取式均可由bterm(bexpr)推导出来,所有对子布尔表达式施加not运算或加括号或简单true、false都可由bfactor(bexpr、bterm)推导出来

最简单的布尔表达式true和false显然成立

假定对长度小于n的布尔表达式,均可由文法推导出来

考虑长度等于n的布尔表达式B,显然,B只能是以下形式之一

B=B1orB2

B=B1andB2

B=notB1

B=(B1)

以上几种情况,B1、B2的长度均小于n

对于情况1:

B为析取式,B1可为析取式也可为合取式,B2为合取式,根据假设可由bexpr合bterm推导出来,显然可构造推导过程,由bexpr推导出B

其他情况类似,命题二得证

综合一、二,可知文法产生的语言就是布尔表达式

c)

(Aho)4.4考虑文法

R→R‘|’R|RR|R*|(R)|a|b

c)构造等价的非二义性文法

R→R‘|’A|A

A→AB|B

B→B*|C

C→(R)|a|b

(Aho)4.5下面if-then-else文法试图消除空悬else的二义性,证明它仍是二义性的

stmt→ifexprthenstmt

|matched_stmt

matched_stmt→ifexprthenmatched_stmtelsestmt

|other

解:

用S、M、E表示stmt、matched_stmt和expr,用i、t、e、o表示if、then、else和other

则句子iEtiEtoeiEtoeo对应两个最左推导:

SÞiEtSÞiEtMÞiEtiEtMeSÞiEtiEtoeSÞiEtiEtoeM

ÞiEtiEtoeiEtMeSÞiEtiEtoeiEtoeSÞiEtiEtoeiEtoeM

ÞiEtiEtoeiEtoeo

SÞMÞiEtMeSÞiEtiEtMeSeSÞiEtiEtoeSeSÞiEtiEtoeiEtSeS

ÞiEtiEtoeiEtMeSÞiEtiEtoeiEtoeSÞiEtiEtoeiEtoeM

ÞiEtiEtoeiEtoeo

因此文法是二义性文法

直接构造比较困难,可从SLR分析表的构造角度考虑,LR(0)项目集规范族中,项目

I8={M→iEtM·eS,S→·M},有移进/归约冲突,这就是是二义性所在。

显然,存在句型...iEtMeS...和...iEtSeS...,当M位于栈顶时,产生移进/归约冲突。

按此思路,构造形如...iEtSeS...的句型即可

(Aho)4.6为下列语言设计上下文无关文法。

哪些语言是正规式?

a)满足这样条件的二进制串:

每个0之后都紧跟着至少一个1

S→0A| 1S|e

A→1S

正规式:

(1|01)*

b)0和1个数相等的二进制串

S→0S1S|1S0S|e

d)不含011子串的二进制串

S→0A|1S|e

A→0A|1B|e

B→0A|e

正规式:

1*(0|01)*

e)具有形式xy的二进制串,x≠y

S→A|B|AB|BA

A→DAD|0

B→DBD|1

D→0|1

A、B分别表示中心符号为0、1的长度为奇数的二进制串

将AB串接,长度为偶数,将它从中间分为长度相等的两部分,x、y

虽然A、B长度可能不一样,但容易得到,A的中心0在x中的位置,与B的中心1在y中的位置是相同的,因此x≠y

BA的情况类似

f)形如xx的0、1串

解:

此语言无法用上下文无关文法描述

(Aho)4.11对习题4.1中文法

a)消除左递归

S→(L)|a

L→SL’

L’→,SL’|e

b)构造预测分析表,对4.1(b)中句子,给出预测分析器的运行过程

FIRST(S)={(,a)

FIRST(L)={(,a}

FIRST(L’)={‘,’,e}

FOLLOW(S)={‘,’,),$}

FOLLOW(L)={)}

FOLLOW(L’)={)}

预测分析表:

a

$

S

S→a

S→(L)

L

L→SL’

L→SL’

L’

L’→e

L’→,SL’

(a,a)的分析过程

输入

输出

$S

(a,a)$

$)L(

(a,a)$

S→(L)

$)L

a,a)$

L→SL’

$)L’S

a,a)$

S→a

$)L’a

a,a)$

$)L’

a)$

L’→,SL’

$)L’S,

a)$

$)L’S

a)$

S→a

$)L’a

a)$

$)L’

)$

L’→e

$)

)$

$

$

其他两个句子的分析过程类似

(Aho)4.13下面文法产生除e外所有长度为偶数的a的串

S→aSa|aa

a)试为该文法构造一个带回溯的递归下降语法分析器,对S的两个候选式首先考虑aSa。

证明:

S所对应的过程可以成功分析2、4、8个a的串,但6个a的串不行。

解:

aa的分析过程,其中√表示匹配成功,×表示匹配失败,匹配失败则尝试下个候选式

aaaa分析过程:

aaaaaa分析过程:

aaaaaaaa分析过程:

b)此语法分析器能识别什么样的语言?

解:

由a)的解可以看出,2N个a的串分析过程中,步骤如下

1)产生2N+1个S的语法树,对第2N+1个S进行扩展时输入缓冲已空,失败

2)对第2N个S尝试候选式aa,第二个a匹配失败

3)对第2N-1个S尝试候选式aa,左边N-1个a匹配,右边最后一个a匹配,倒数第二个a失败

4)对第2N-2个S尝试候选式aa,左边N-2个a匹配,右边最后一个a和倒数第二个a匹配,倒数第三个a失败

5)对第2N-4个S尝试候选式aa,左

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

当前位置:首页 > 求职职场 > 简历

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

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