清华大学编译原理第二版课后习答案文档格式.docx
《清华大学编译原理第二版课后习答案文档格式.docx》由会员分享,可在线阅读,更多相关《清华大学编译原理第二版课后习答案文档格式.docx(40页珍藏版)》请在冰豆网上搜索。
NDD....
=>
NDDDD...D=>
D......D
或者:
允许0
开头的非负整数?
第3题
为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。
G[S]:
S->
S+D|S-D|D
D->
0|1|2|3|4|5|6|7|8|9
第4
已知文法G[Z]:
Z→aZb|ab
写出L(G[Z])的全部元素。
Z=>
aZb=>
aaZbb=>
aaa..Z...bbb=>
aaa..ab...bbb
L(G[Z])={anbn|n>
=1}
第5
写一文法,使其语言是偶正整数的集合。
要求:
打头;
(2)不允许0
打头。
(1)允许0
开头的偶正整数集合的文法
E→NT|D
T→NT|D
N→D|1|3|5|7|9
D→0|2|4|6|8
T→FT|G
D→2|4|6|8
F→N|0
G→D|0
第6
已知文法G:
<
表达式>
:
=<
项>
|<
+<
因子>
*<
=(<
)|i
试给出下述表达式的推导及语法树。
(5)i+(i+i)
(6)i+i*i
+
i
(
)
(5)
+(<
+i)
+(i+i)
i+(i+i)
*
(6)
*i
+i*i
i+i*i
第7
证明下述文法G[〈表达式〉]是二义的。
〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉
〈运算符〉∷=+|-|*|/
可为句子a+a*a
构造两个不同的最右推导:
最右推导1
〈表达式〉〈表达式〉〈运算符〉〈表达式〉
〈表达式〉〈运算符〉a
〈表达式〉*
a
〈表达式〉〈运算符〉〈表达式〉*
〈表达式〉〈运算符〉a
〈表达式〉+
a
最右推导2
〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉
〈表达式〉〈运算符〉〈表达式〉〈运算符〉
〈表达式〉〈运算符〉〈表达式〉
第8
文法G[S]为:
该文法是否为二义的?
为什么?
对于串abc
(1)S=>
Ac=>
abc
(2)S=>
aB=>
abc
即存在两不同的最右推导。
所以,该文法是二义的。
对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。
S
B
b
c
A
b
第9
考虑下面上下文无关文法:
S→SS*|SS+|a
(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。
S
*
(2)G[S]的语言是什么?
(1)此文法生成串aa+a*的最右推导如下
S=>
SS*=>
Sa*=>
SS+a*=>
Sa+a*=>
aa+a*
(2)该文法生成的语言是:
*和+的后缀表达式,即逆波兰式。
第10
文法S→S(S)S|ε
生成的语言是什么?
该文法是二义的吗?
说明理由。
(1)
嵌套的括号
(2)
是二义的,因为对于()()可以构造两棵不同的语法树。
第11
令文法G[E]为:
E→T|E+T|E-T
T→F|T*F|T/F
F→(E)|i
证明E+T*F
是它的一个句型,指出这个句型的所有短语、直接短语和句柄。
此句型对应语法树如右,故为此文法一个句型。
因为存在推导序列:
E=>
E+T=>
E+T*F,所
以
E+T*F
句型
此句型相对于E
的短语有:
E+T*F;
相对于T
的短语
有T*F
直接短语为:
T*F
句柄为:
第13
一个上下文无关文法生成句子abbaa
的推导树如下:
(1)给出串abbaa
最左推导、最右推导。
(2)该文法的产生式集合P
可能有哪些元素?
(3)找出该句子的所有短语、直接短语、句柄。
B
A
ε
(1)串abbaa
最左推导:
ABS=>
aBS=>
aSBBS=>
aBBS=>
abBS=>
abbS=>
abbAa=>
abbaa
最右推导:
ABAa=>
ABaa=>
ASBBaa=>
ASBbaa=>
ASbbaa=>
Abbaa=>
(2)产生式有:
S→ABS
|Aa|ε
A→a
B→SBB|b
可能元素有:
aa
ab
abbaa
aaabbaa
……
(3)该句子的短语有:
是相对A
的短语
是相对S
是相对B
εbb
aεbbaa
直接短语有:
句柄是:
《编译原理》课后习题答案第四章
构造下列正规式相应的DFA.
1(0|1) *101
1(1010*|1(010)*1)*0
(3)
a((a|b)*|ab*a)*b
(4)
b((ab)*|bb)*ab
先构造NFA:
用子集法将NFA
确定化
.
0
1
X
AB
AB
AC
ABY
ABY
除X,A
外,重新命名其他状态,令AB
为B、AC
为C、ABY
为D,因为D
含有Y(NFA
的终态),所以D
为终态。
C
D
D
DFA
的状态图:
(2)先构造NFA:
1
E
0
ε
F
G
H
I
J
K
L
Y
X
T0=X
ABFL
T1=
ABFL
Y
CG
CG
CGJ
T2=
T3=
CGJ
DH
DH
K
ABFKL
T4=
EI
EI
ABEFIL
T5=
ABFKL
T6=
ABEFIL
EJY
ABEFGJLY
T7=
ABEFGJLY
EHY
CGK
ABEFHLY
CGK
ABCFGJKL
T8=
ABEFHLY
EY
CGI
ABEFLY
CGI
CGJI
T9=
ABCFGJKL
DHY
DHY
T10=
ABEFLY
T11=
CGJI
DHJ
DHJ
T12=
T13=
EIK
EIK
ABEFIKL
T14=
ABEFIKL
将T0、T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14重新命名,分别用0、
1、2、3、4、5、6、7、8、9、10、11、12、13、14
表示。
因为2、7、8、10、12
中含有Y,
所以它们都为终态。
2
3
2
3
5
6
5
6
7
8
9
10
11
9
12
11
13
14
14
12
7
8
4
a,b
E
F
C
ABCD
T1=ABCD
BE
BY
ABCDE
BY
ABCDY
T2=ABCDE
BEF
BEY
ABCDEF
BEY
ABCDEY
T3=ABCDY
T4=ABCDEF
T5=ABCDEY
将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5
因为3、5