《编译原理实践及应用》习题的参考答案.pdf
附录部分习题参考答案
第1章参考答案:
1,2,3,4,5,6,7解答:略!
第2章参考答案:
1,2,3:解答:略!
4.解答:
A:①B:③C:①D:②
5.解答:
用E表示表达式,T表示项,F表示因子,上述文法可以写为:
E→T|E+T
T→F|T*F
F→(E)|i
最左推导:
E=E+T=E+T+T=T+T+T=F+T+T=i+T+T=i+F+T=i+i+T
=i+i+F=i+i+i
E=E+T=T+T=F+T=i+T=i+T*F=i+F*F=i+i*F=i+i*i
最右推导:
E=E+T=E+F=E+i=E+T+i=E+F+i=E+i+i=T+i+i
=F+i+i=i+i+i
E=E+T=E+T*F=E+T*i=E+F*i=E+i*i=T+i*i=F+i*i=i+i*i
i+i+i和i+i*i的语法树如下图所示。
i+i+i、i+i*i的语法树
6.解答:
(1)终结符号为:{or,and,not,(,),true,false}
非终结符号为:{bexpr,bterm,bfactor}
开始符号为:bexpr
(2)句子not(trueorfalse)的语法树为:
7.解答:
nninni
(1)把abc分成ab和c两部分,分别由两个非终结符号生成,因此,生成此文法的
产生式为:
S→AB
A→aAb|ab
B→cB|
(2)令S为开始符号,产生的w中a的个数恰好比b多一个,令E为一个非终结符号,
产生含相同个数的a和b的所有串,则产生式如下:
S→aE|Ea|bSS|SbS|SSb
E→aEbE|bEaE|
(3)设文法开始符号为S,产生的w中满足|a|≤|b|≤2|a|。因此,可想到S有如下的产生
式(其中B产生1到2个b):
S→aSBS|BSaS
B→b|bb
(4)解法一:
S→〈奇数头〉〈整数〉〈奇数尾〉
|〈奇数头〉〈奇数尾〉
|〈奇数尾〉
〈奇数尾〉→1|3|5|7|9
〈奇数头〉→2|4|6|8|〈奇数尾〉
〈整数〉→〈整数〉〈数字〉|〈数字〉
〈数字〉→0|〈奇数头〉
解法二:文法G=({S,A,B,C,D},{0,1,2,3,4,5,6,7,8,9},P,S)
S→AB|B
A→AC|D
B→1|3|5|7|9
D→2|4|6|8|B
C→0|D
(5)文法G=({N,S,N,M,D},{0,1,2,3,4,5,6,7,8,9},S,P)
S→N0|N5
N→MD|
M→1|2|3|4|5|6|7|8|9
D→D0|DM|
(6)G[S]:S→aSa|bSb|cSc|a|b|c|
8.解答:
(1)句子abab有如下两个不同的最左推导:
S=aSbS=abS=abaSbS=ababS=abab
S=aSbS=abSaSbS=abaSbS=ababS=abab
所以此文法是