XJTUSE-编译原理-第七章-HOMEWORK

第一题

第一问

由公式可知:

其中表示为 i 的下界,表示为 i 的可取值个数,w 表示数组元素宽度

得:

第二问

下面是四元式序列:

100(*,j,20,T1)

101(+,T1,m,T1)

102(*,T1,22,T1)

103(+,T1,n,T1)

104(-,b,463,T2)

105(=[],T2[T1],-,T3)

106(*,i,96,T4)

107(+,T4,T3,T4)

108(-,a,97,T5)

109(*,u,v,)

110([]=,T6,-,T5[T4])

第二题

第一问

由公式可知:

其中表示为 i 的下界,表示为 i 的可取值个数,w 表示数组元素宽度

得:

第二问

下面是四元式序列:

100(*,i,22,T1)

101(+,T1,j,T1)

102(-,b,23,T2)

103(=[],T2[T1],-,T3)

104(+,m,n,T4)

105(*,T3,18,T5)

106(+,T5,T4,T5)

107(*,T5,96,T5)

108(+,T5,u,T5)

109(-,a,1825,T6)

110([]=,v,-,T6[T5])

第三题

第一问

100(j≠,C,D,0->102)

101(j,-,-,0)

102(j=,E,F,0->104)

103(j,-,-,0->101)

104(j<,G,H,0->106)

105(j,-,-,0->100)

106(j>,I,J,0->108)

107(j,-,-,0->104)

108(<=,A,B,T1)

109(not,T1,-,T2)

110(:=,T2,-,K)

111(j,-,-,104)

112(j,-,-,100)

第二问

对每一个语句进行考虑,从左到右。

E3

E3->E1 and M2 E2

有如下的 backpatch 和 merge 函数:

backpatch(E1.truelist,M2.quad)=backpatch(100,102)

E3.falselist:=merge(E1.falselist,E2.falselist):=merge(101,103)=103

S3

S3 -> while M4 E4 do M5 S2

有如下的 backpatch 函数:

backpatch(S2,nextlist,M4.quad)=backpatch(107,104)

backpatch(E4.truelist,M5.quad)=backpatch(104,106)

S2

S2 -> if E5 then M6 S1

有如下的 backpatch 和 merge 函数:

backpatch(E5.truelist,M6.quad)=backpatch(106,108)

S2.nextlist := merge(E5.falselist,S1.nextlist):=merge(107,0)=107

S4

S4 -> while M1 E3 do M3 S3

有如下的 backpatch 函数:

backpatch(S3.nextlist,M1.quad)=backpatch(105,100)

backpatch(E3.truelist,M3.quad)=backpatch(102,104)

第三问

不存在 S5,下面给出 S4.nextlist 所指的待回填的链构成:

第四题

第一问

100(j≠,C,D,0->104)

101(j,-,-,0->102)

102(j=,E,F,0->100->104)

103(j,-,-,0->110)

104(j<,G,H,0->106)

105(j,-,-0)

106(*,I,J,T1)

107(:=,T1,-,K)

108(j,-,-,104)

109(j,-,-,0->105)

110(<=,A,B,T2)

111(not,T2,-,T3)

112(:=,T3,-,L)

第二问

对每一个语句进行考虑,从左到右。

E3

E3 -> E1 or M1 E2

有如下的 backpatch 和 merge 函数:

backpatch(E1.falselist,M1.quad)=backpatch(101,102)

E3.truelist:=merge(E1.truelist,E2.truelist):=merge(100,102)=102

S4

S4 -> if E3 then M2 S2 N else M5 S3

有如下的 backpatch 和 merge 函数:

backpatch(E3.truelist,M2.quad)=backpatch(102,104)

backpatch(E3.falselist,M5.quad)=backpatch(103,110)

S4.nextlist := merge(S2.nextlist,N.nextlist,S3.nextlist):=merge(105,109,0)=109

S2

S2 -> while M3 E4 do M4 S1

有如下的 backpatch 和 merge 函数:

backpatch(S1.nextlist,M3.quad)=backpatch(108,104)

backpatch(E4.truelist,M4.quad)=backpatch(104,106)

第三问

不存在 S5,下面给出 S4.nextlist 所指的待回填的链构成:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值