(6)
(2)
假链头E.false=7
(5)
goto
(1)
(4)
假出口链(7,5)
(6)
ifb=dgoto
(8)
(5)
(7)
goto
(1)
(3)
(8)
...
问答第2题
解:
拓广文法G',增加产生式S'→S
在项目集I0中:
有移进项目D→·d
归约项目D→·和B→·
存在移进-归约和归约-归约冲突,所以G不是LR(0)文法。
若产生式排序为:
(0)S'→S
(1)S→Db
(2)S→B
(3)D→d
(4)D→ε
(5)B→Ba
(6)B→ε
G′的LR(0)项目集族及识别活前缀的DFA如下图:
识别G′活前缀的DFA
由产生式知:
Follow(S)={#}
Follow(D)={b}
Follow(B)={a,#}
在I0中:
Follow(D)∩{d}={b}∩{d}=
Follow(B)∩{d}={a,#}∩{d}=
Follow(D)∩Follow(B)={b}∩{a,#}=
在I3中:
Follow(S)∩{a}={#}∩{a}=
所以在I0,I3中的移进-归约和归约-归约冲突可以由Follow集解决,所以G是SLR
(1)文法,
构造的SLR
(1)分析表如下表。
SLR
(1)分析表
状态
ACTION
GOTO
b
d
a
#
S
D
B
0
r4
S4
r6
r6
1
2
3
1
acc
2
S5
3
S6
r2
4
r3
5
r1
6
r5
r5
问答第3题
解:
:
I0:
问答第4题
解:
对串dada#的分析过程如下表
对输入串dada#的分析过程
步骤
状态栈
文法符号栈
剩余输入符号
动作
1
2
3
4
5
6
7
8
9
0
02
024
0245
0246
02467
024678
0246
01
#
#V
#Vd
#Vda
#VdB
#VdBd
#VdBda
#VdB
#S
dada#
dada#
ada#
da#
da#
a#
#
#
#
用V→ε归约
移进
移进
用B→a归约
移进
移进
用B→Bda归约
用S→VdB归约
接受
问答第5题
解:
(1)PL/0示意程序中当程序执行到D过程调用A过程后(即执行A过程体时)的栈式存储分配布局和用Display显示表时栈中过程最新活动记录的内容如下图。
栈式存储分配布局和栈中过程最新活动记录的内容
(2)Display表和全局Display的作用是:
·Display表的作用是对嵌套过程语言实现对非局部变量的引用而设置的,它依次存放着包围它的外过程的最新活动记录的基地址SP值,由于,嵌套层次为i+1过程中的非局部变量可能在i,i-1,…,0层,所以,对非局部变量的引用是通过它的Display表元素d[i],d[i-1],…,d[0]而获得包围它的外过程的最新活动记录的基地址SP值,再加上变量在该过程(第i层)的偏移量。
如若非局部变量a是在第i层,那么引用a时,首先从当前栈顶过程的Display表中元素d[i]中取出存放的第i层最新活动记录基地址sp值,然后加上a所在过程(第i层)的偏移量,就得到a的存放地址。
·全局Display是存放本过程Display表的起始地址,其作用是把Display地址作为连接数据之一,如过程P1调用过程P2时,这时先从P1的全局Display找到P1的Display表起始地址,然后从P1的Display表中自底向上地抄录I2个单元(I2为P2的层数)再添上进入P2后新建立的P2的sp值,就构成了P2的Display表。
问答第6题
解:
问答第5题PL/0示意程序编译到D过程体时TABLE表的内容如下表。
TABLE表的内容
name
kind
level
val
adr
size
main
x
A
B
n
e
g
D
j
k
procedure
variable
procedure
procedure
constant
variable
variable
procedure
variable
variable
.
0
0
0
.
1
1
1
2
2
.
.
.
.
7
0
dx
过程A的入口
过程B的入口(待填)
.
dx
dx+1
过程D的入口
dx
dx+1
4
.
4
(待填5)
.
.
.
5
由于A和B是并列过程,当编译到B过程时A过程体已经编译结束,A所定义的标识符不会再被使用,所以由B过程定义的标识符覆盖。
问答第7题
(1)解:
描述L1语言的正规文法如下:
S→cA
A→aA|B
B→dD
D→bD|ε
(2)解:
描述L2语言的二型文法如下:
S→AB
A→0A1|0a1
B→bBc|ε
问答第8题
解:
句型(SdG) 短语:
(SdG) 简单(直接)短语:
G、a
句柄:
G
最左素短语:
SdG
问答第9题
解:
与正规式R=(aba)*((ba)*|b)b等价的NFA如下图:
问答第10题
解:
用子集法确定化如下表
I
Ia
Ib
状态
{X,0,1,3}
{0,1,3}..
{2,3,Y}..
{1,3}....
{2,Y}....
{Y}......
{0,1,3}
{0,1,3}
{1,3}..
.....
{1,3}..
.....
{2,3,Y}
{2,3,Y}
{Y}....
{2,Y}..
{Y}....
....
X
1
2
3
4
Y
确定化后如下图
问答第11题
解:
文法G[S]改写为等价的不含左递归和左公共因子的G'[S]为:
S→[A
A→B]A′
A′→SA′|ε
B→aB′
B′→B|ε
问答第12题
解:
文法的FIRST集和FOLLOW集
非终结符
FIRST集
FOLLOW集
S
{a}.....
{#,b}
D
{a,ε}
{#,b}
T
{b}.....
{e}....
M
{b}.....
{e}....
H
{b,ε}
{e}....
由于select(D→STe)∩select(D→ε)={a}∩{#,b}=
select(H→M)∩select(H→ε)={b}∩{e}=
所以该文法是LL
(1)文法,LL
(1)分析表如下表。
LL
(1)分析表
a
e
b
#
S
→aD.
D
→STe
→ε
→ε
T
→bM
M
→bH
H
→ε
→M.
表中不含多重入口也可说明文法是LL
(1)的。