资源描述:
《清华大学编译原理第二版课后习答案.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《编译原理》课后习题答案第一章第 4 题对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。(1) else 没有匹配的if(2) 数组下标越界(3) 使用的函数没有定义(4) 在数中出现非数字字符答案:(1) 语法分析(2) 语义分析(3) 语法分析(4) 词法分析《编译原理》课后习题答案第三章第1 题文法G=({A,B,S},{a,b,c},P,S)其中P 为:S→Ac
2、aBA→abB→bc写出L(G[S])的全部元素。答案:L(G[S])={abc}第2 题文法G[N]为:N→D
3、NDD→0
4、1
5、2
6、3
7、
8、4
9、5
10、6
11、7
12、8
13、9G[N]的语言是什么?答案:G[N]的语言是V+。V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD.... =>NDDDD...D=>D......D或者:允许0 开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。答案:G[S]:S->S+D
14、S-D
15、DD->0
16、1
17、2
18、3
19、4
20、5
21、6
22、7
23、8
24、9第4 题已知文法G[Z]:Z→aZb
25、ab写出L(G[Z])的全部元素。答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbbL(G
26、[Z])={anbn
27、n>=1}第5 题写一文法,使其语言是偶正整数的集合。 要求:(1) 允许0 打头;(2)不允许0 打头。答案:(1)允许0 开头的偶正整数集合的文法E→NT
28、DT→NT
29、DN→D
30、1
31、3
32、5
33、7
34、9D→0
35、2
36、4
37、6
38、8(2)不允许0 开头的偶正整数集合的文法E→NT
39、DT→FT
40、GN→D
41、1
42、3
43、5
44、7
45、9D→2
46、4
47、6
48、8F→N
49、0G→D
50、0第6 题已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。(5)i+(i+i)
51、(6)i+i*i答案:<表达式><表达式> + <项><因子><表达式><表达式> + <项><因子>i<项><因子>i<项><因子>i( )(5) <表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>)=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)<表达式><表达式> + <项><项> * <因子><因
52、子> i<项><因子>ii(6) <表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i第7 题证明下述文法G[〈表达式〉]是二义的。〈表达式〉∷=a
53、(〈表达式〉)
54、〈表达式〉〈运算符〉〈表达式〉〈运算符〉∷=+
55、-
56、*
57、/答案:可为句子a+a*a 构造两个不同的最右推导:最右推导1 〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈表达式〉〈运算符〉a〈表达式〉* a〈表达式〉〈运算符〉〈表达式〉* a〈表达式〉〈运算
58、符〉a * a〈表达式〉+ a * aa + a * a最右推导2 〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a〈表达式〉〈运算符〉〈表达式〉 * a〈表达式〉〈运算符〉a * a〈表达式〉+ a * aa + a * a第8 题文法G[S]为:S→Ac
59、aBA→abB→bc该文法是否为二义的?为什么?答案:对于串abc(1)S=>Ac=>abc (2)S=>aB=>abc即存在两不同的最右推导。所以,该文法是二义的。或者:对输入字符串abc,能构造两棵不同的语
60、法树,所以它是二义的。Sa Bb cSA ca b第9 题考虑下面上下文无关文法:S→SS*
61、SS+
62、a(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。SS S *S S + aa a(2)G[S]的语言是什么?答案:(1)此文法生成串aa+a*的最右推导如下S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a*(2)该文法生成的语言是:*和+的后缀表达式,即逆波兰式。第10 题文法S→S(S)S
63、ε(1) 生成的语言是什么?(2) 该文法是二义的吗?说明理由。答案:(1) 嵌套的括号(2) 是二义的,因为对于()(
64、)可以构造两棵不同的语法树。第11 题令文法G[E]为:E→T
65、E+T
66、E-TT→F
67、T*F
68、T/FF→(E