#编译原理课后习题答案Word文件下载.docx

上传人:b****4 文档编号:13545166 上传时间:2022-10-11 格式:DOCX 页数:31 大小:280.91KB
下载 相关 举报
#编译原理课后习题答案Word文件下载.docx_第1页
第1页 / 共31页
#编译原理课后习题答案Word文件下载.docx_第2页
第2页 / 共31页
#编译原理课后习题答案Word文件下载.docx_第3页
第3页 / 共31页
#编译原理课后习题答案Word文件下载.docx_第4页
第4页 / 共31页
#编译原理课后习题答案Word文件下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

#编译原理课后习题答案Word文件下载.docx

《#编译原理课后习题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《#编译原理课后习题答案Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。

#编译原理课后习题答案Word文件下载.docx

NNDN1ND1N01D01301

NNDNDDDDD3DD30D301

NNDN1ND1N31ND31N431ND431N5431D543175431

NNDNDDNDDDNDDDDDDDDD7DDDD75DDD754DD7543D754

31

4.证明文法SiSeS|iS|i是二义性文法。

对于句型iiSeS存在两个不同的最左推导:

1/23

SiSeSiiSes

SiSiiSeS所以该文法是二义性文法。

5.给出描述下面语言的上下文无关文法。

<

1)L1={anbnci|n>

=1,i>

=0}<

2)L2={aibj|j>

=i>

=1}<

3)L3={anbmcmdn|m,n>

=0}

1)

S

AB

A

aAb

|ab

B

cB|

ASb

|ab

a|

3)

aSd

|A|

bAc

|

6.设计一个最简的DFAM,使其能够识别所有的被3整除的无符号十进制整数。

2|5|8

1|4|7

7.设计一个DFA,使其能够接受被4整除的二进制数。

8.写出表达下列各项的正则表达式。

1)二进制数且为5的倍数。

<

2)Σ={a,b,c},第一个a位于第一个b之前的字符串。

3)Σ={a,b,c},包含偶数个a的字符串。

4)Σ={0,1},不包含11子串的字符串。

2/23

可以先画出相应的有限自动机

1S=A

2A=0A+1B+T

3B=0C+1D

4C=0E+1A

5D=0B+1C

6E=0D+1E解以上方程组:

⑥E=1*0D

②A=0*1B+0*T

⑥代入④C=01*0D+1A

⑤代入④C=01*00B+01*01C+1AC=xB+yA

其中x=(01*01>

*01*00y=(01*01>

*1

⑤代入③B=0C+10B+11CB=(0|11>

C+10B

B=(10>

*(0|11>

C

将C=xB+yA代入上式B=uB+vA

B=u*vA

其中u=(10>

*(0|11>

xv=(10>

y将B=u*vA代入②A=0*1u*vA+0*T

3/23

A=(0*1u*v>

*0*T将A代入①S=(0*1u*v>

*0*T串(0*1u*v>

*0*即为所求。

2)该题目理解为:

至少有一个a和一个b,且a出现在b的前面<

可以有间隔),则答案为:

c*a(a|c>

*b(a|b|c>

*

3)((b|c>

*a(b|c>

*a>

*(b|c>

*(a(b|c>

*a|b|c>

4)(0|10>

*(1|>

第三章

1.词法分析器的功能是什么?

读源程序的字符序列,逐个拼出单词,并构造相应的内部表示TOKEN;

同时检查源程

序中的词法错误。

2.试分析分隔符<

空格、跳格及回车等)对词法分析的影响。

空格、跳格、回车等分隔符号对词法分析不起作用,可以删除。

但是回车符号可以用于错误定位,所以在删除回车符号前需要统计回车的个数。

3.给出识别C语言全部实型常数的自动机。

(+|-|>

([1-9][0-9]*|0>

(.[0-9][0-9]*|>

(E(+|-|>

[0-9][0-9]*>

4.写出识别C语言中所有单词的LEX程序。

L=[A-Z]|[a-z]

D=[0-9]

D1=[1-9]

%%

(L|_>

(L|D|_>

{return(1>

}

D1D*

{return(2>

}

+

{return(3>

第四章

1.设有如下文法G[S]:

SaABbcd|

AASd|

BSAh|eC|

CSf|Cg|

(1)求每个产生式的Predict集。

(2)该文法是否为LL(1>

文法?

为什么?

(1>

Predict(SaABbcd>

={a}

Predict(S>

={#,d,f,a,h}

Predict(AASd>

={a,d}

4/23

Predict(A>

={h,a,d,b,e}

Predict(BSAh>

={a,d,h}

Predict(BeC>

={e}

Predict(B>

={b}

Predict(CSf>

={a,f}

Predict(CCg>

={a,f,g}

Predict(C>

={g,b}

(2>

因为Predict(AASd>

Predict(A>

,所以该文法不是LL(1>

文法。

2.下列描述括号匹配的文法中,哪些是LL(1>

(1>

S(SS'

|

S'

>

S(S>

S|

(3>

SS(S>

(4>

S(S|S'

(S'

>

不是,(2>

是,(3>

不是,(4>

不是

3.已知文法G[E]:

EE+T|T

TT*F|F

Fi|(E>

请按递归下降法构造该文法的语法分析程序。

求产生式的predict集合:

predict(EE+T>

={i,(}

predict(ET>

predict(TT*F>

predict(TF>

因为文法中非终极符号E和T对应的产生式的predict集合的交集都不为空,所以该文法不满足自顶向下分析的条件,现对文法进行等价变换得到如下文法:

E

TE'

E'

+TE'

T

FT'

T'

*FT'

F

i

(E>

新文法的

predict集合

Predict(ETE'

={(,i}

Predict(E'

={+}

={#,>

Predict(TFT'

Predict(T'

*FT'

={*}

5/23

={+,>

#}

Predict(Fi>

={i}

Predict(F(E>

={(}

因为以上文法中任意非终极符号对应的产生式的predict集合的交集都为空,所以满足自顶向下分析的条件,所以可以写出如下的递归下降语法分析伪代码:

VoidE(>

{if(token{(,i}>

{T(>

E'

(。

elseError(>

voidE'

(>

{if(token{+}>

{Match(‘。

+T'

(>

elseif(token{#,>

}>

{。

voidT(>

{if(token{i,(}>

{F(>

T'

voidT'

{if(token{*}>

*F'

elseif(token{+,>

#}>

voidF(>

{if(token{i}>

i}'

elseif(token{(}>

(E‘(>

Match(‘>

'

4.构造一个LL(1>

文法G,它能识别语言L:

L={|为字母表上不包括两个相邻的1的非空串},其中={0,1}。

并证明你所构造的文法是LL(1>

0E

|1F

0E|

1F

B|

C|

Predict(A0E>

={0}

Predict(A

1F>

={1}

Predict(B

0E>

Predict(E

B>

={0,1}

={#}

Predict(F

C>

对任意非终极符号对应的产生式的predict集合的交集都为空,所以该文法是LL(1>文

6/23

法。

5.已知文法G[A]为:

AaABe|a

BBb|d

(1)试给出与G[A]等价的LL(1>

文法G'

[A。

]

(2)构造G'

[A的]LL(1>

分析表并给出输入串aade#的分析过程。

所求G'

[A为]:

aA'

A'

ABe

dB'

B'

bB'

(5>

(6>

Predict(AaA'

ABe>

={#,d}

={d}

bB'

对任意非终极符号对应的产生式的predict集合的交集都为空,所以该文法是LL(1>

(3)分析表如下:

a

b

d

e

#

aade#的分析过程如下

分析栈

输入流

动作

A#

aade#

替换(1>

#

匹配

ade#

替换(2>

ABe#

替换(

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

当前位置:首页 > 经管营销 > 经济市场

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

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