编译原理第六章到第十一章课后习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理第六章到第十一章课后习题答案
p116/1.已知文法G[S]为:
S→a|∧|(T)
T→T,S|S
(1) 计算FIRSTVT -- LASTVT表
(2) 构造算符优先关系表(OPERATER PRIORITY RELATION TABLE),说明是否为算符优先文法。

=: #=#, (=)
<: (< FIRSTVT(T) , ,<firstvt(s)<="" ,="" p="">
>:LASTVT(S)># , LASTVT(T)>), LASTVT(T)> ,
表中无多重人口所以是算符优先(OPG)文法。

(3)计算G[S]的优先函数。

收敛
(4)对输入串(a,a)#的算符优先分析过程为
Success!
3.有文法G(S):
s->V
v->T/ViT
T->F/T+F
F->)V*|(
(1)(+(i(的规范推导
S=>V
=>ViT
=>ViF
=>Vi(
=>Ti(
=>T+Fi(
=>T+(i(
=>F+(i(
=>(+(i(
(2)F+Fi(的短语、句柄、素短语。

短语
S: F+Fi(
T1:F+F (素短语)
T2:F (句柄)
F:( (素短语)
(3) G(S)是否为OPG?若是,给出(1)中句子的分析过程!S’->#S# S->V V->T/ViT T->F/T+F F->)V*|(
算符优先关系表(OPERATER PRIORITY RELATION TABLE)
对输入串(+(I(的算符优先分析过程为:
p152/2
文法:
S→L.L|L
L→LB|B
B→0|1
拓广文法为G′,增加产生式S′→S
I3
若产生式排序为:
0 S' →S
1 S →L.L
2 S →L
3 L →LB
4 L →B
5 B →0
6 B →1
由产生式知:
First (S' ) = {0,1}
First (S ) = {0,1}
First (L ) = {0,1}
First (B ) = {0,1}
Follow(S' ) = {#}
Follow(S ) = {#}
Follow(L ) = {.,0,1,#}
Follow(B ) = {.,0,1,#}
G′的LR(0)项目集族及识别活前缀的DFA如下图所示:
I5
B →.0和B →.1为移进项目,S →L.为归约项目,存在移进-归约冲突,因此所给文法不是LR(0)文法。

在I
2、I
8
中:
Follow(s) ∩{0,1}= { #} ∩{0,1}=
所以在I
2、I
8
中的移进-归约冲突可以由Follow集解决,所以G是SLR(1)文法。

构造的SLR(1)分析表如下:
分析成功,说明输入串101.110是题目2文法的句子。

0) S’->S
1)S->a
2)S->^
3)S->(T)
4)T->T,S
5)T->S
LR(0)分析表
[8。

1]写出下列各式的逆波兰表示
(1) -a-((b*c)/(c-d) + (-b)*a)
(2) -A+B*C↑ (D/E)/F
栈顶运算符与当前运算符比较:
栈顶运算符<当前运算符:进栈
栈顶运算符>当前运算符:进行运算
解8.1:
(1) a@bc*cd-/b@a*+ -
(2)A@BCDE/↑*F/+
[8。

2] 写出表达式
A+B*(C-D)-E/F↑G
逆波兰表示,三元组表示,四元组表示。

解8.2:逆波兰表示:ABCD -*+EFG↑/ -
三元组表示:
①( - , C, D )
②(* , B, ① )
③(+ ,A , ② )
④(↑ ,F, G )
⑤( / , E, ④ )
⑥( - ,③,⑤)
四元式组:
1)( - , C , D , T1 )
2)(* , B , T1, T2 )
3)( + , A , T2, T3 )
4)(↑ ,F , G , T4 )
5)( / , E, T4, T5 )
6)( - , T3, T5, T6 )
[例8。

3] 写出条件语句
IF a>0 THEN x:=x+1 ELSE x:=4*( x- 1) 四元式序列
1)( > , a , 0 , ③ )
2)( j , _, _ , ⑥)
3)( + ,x , 1 , T1 )
4)( := , T1, _ , x )
5)( j , , , ⑨ )
6)( - , x , 1 , T2 )
7)(* , 4 , T2 , T3 )
8)( := , T3 , _ , x )
P267/4.
(1)I:=m-1
(2)J:=n
(3)T1:=4*n
(4)V:=a[t1]
(5)I:=I+1
(6)T2:=4*I
(7)T3:=a[t2]
(8)If t3<="" goto="" p="">
(9)J:=j-1
(10)T4:=4*j
(11)T5:=a[t4]
(12)If t5>v goto (9)
(13)If I>=j goto (23)
(14)T6:=4*I
(15)X:=a[t6]
(16)T7:=4*I
(17)T8:=4*j
(18)T9:=a[t8]
(19)A[t7]:=t9
(20)T10:=4*j
(21)A[t10]=x
(22)Goto (5)
(23)T11:=4*I
(24)X:=a[11]
(25)T12:=4*I
(26)T13:=4*n
(27)T14:=a[t13]
(28)A[t12]:=t14
(29)T15:=4*n
(30)A[t15]:=x
(1)划分基本块,并做出其流图。

基本块
流图
(2)将每个基本块中的公共子表达式删除B5中:
(14)t6:=4*I
(15)X:=a[t6]
(16)T7:=4*I
(17)T8:=4*j
(18)T9:=a[t8]
(19)A[t7]:=t9
(20)T10:=4*j
(21)A[t10]=x
(22)Goto (5)
(14)和(16)是公共子表达式、(17)和(20)是公共子表达式,B5变为(14) t
6
:=4*I
(15)
(16) t
7:=t
6
(17) t
8
:=4*J …
(20) t
10:=t
8
(21)
(22)
B6中:
(23)T11:=4*I
(24)X:=a[11]
(25)T12:=4*I
(26)T13:=4*n
(27)T14:=a[t13]
(28)A[t12]:=t14
(29)T15:=4*n
(30)A[t15]:=x
(23)和(25)是公共子表达式、(26)和(29)是公共子表达式,B6变为(23) t
11
:=4*I
(24)
(25) t
12:=t
11
(26) t
13
:=4*n …
(29) t
15:=t
13
(3)找出流图中的循环,将循环不变量移出循环外。

① {B2}
② {B3}
③ {B2,B3,B4,B5}
如下程序流图(图11.18)中,B3中的i∶=2是循环不变量,可以将其提到前置结点吗?你还能举出一些例子说明循环不变量外移的条件吗?
图11.18
解答:不能。

因为B3不是循环出口B4的必经结点。

P269/7.
对图11.19的流图:
(1) 求出流图中各结点n的必经结点集D(n);
(2) 求出流图中的回边;
(3) 求出流图中的循环。

图11.19
(1)D(1)={1}
D(2)={1,2}
D(3)={1,2,3}
D(4)={1,2,3,4}
D(5)={1,2,3,5}
D(6)={1,2,3,6}
D(7)={1,2,7}
D(8)={1,2,7,8}
(2)回边 7 2
(3)循环 {2,3,4,5,6,7} (2)D(1)={1} D(2)={1,2}
D(3)={1,2,3}
D(4)={1,2,3,4}
D(5)={1,2, 5}
D(6)={1,2,5,6}
D(7)={1,2,7}
D(8)={1,2,7,8}
(2)回边 5 2 和 4 3
(3)循环 {2,3,4,5 } {3,4}。

相关文档
最新文档