📅  最后修改于: 2020-12-06 06:46:39             🧑  作者: Mango
LR(0)项目是产品G,在产品右侧的某个位置带有点。
LR(0)项用于指示在解析过程中,已扫描了多少输入直到给定点。
在LR(0)中,将reduce节点放置在整行中。
给定语法:
S → AA
A → aA | b
添加增广产品并在G的每个产品的第一个位置插入“•”符号
S` → •S
S → •AA
A → •aA
A → •b
将增产增加到I0状态并计算关闭
将所有以S开头的产品添加到I0状态,因为“•”后跟非终结符。因此,I0状态变为
I0 = S`→•S
S→•AA
在修改的I0状态中添加所有以“ A”开头的产品,因为“•”后跟非终结符。因此,I0状态变为。
I0 = S`→•S
S→•AA
A→•aA
A→•b
I1 =转到(I0,S)=闭包(S`→S•)= S`→S•
在这里,产量减少了,所以状态接近了。
I1 = S`→S•
I2 =转到(I0,A)=闭包(S→A•A)
将所有以A开头的产品添加到I2状态,因为“•”后跟非终结符。因此,I2状态变为
I2 = S→A•A
A→•aA
A→•b
转到(I2,a)=闭包(A→a•A)=(与I3相同)
转到(I2,b)=闭包(A→b•)=(与I4相同)
I3 =转到(I0,a)=闭包(A→a•A)
在I3中添加以A开头的作品。
A→a•A
a→•aa
="" a→•b<="" p="">
转到(I3,a)=闭包(A→a•A)=(与I3相同)
转到(i3,b)=闭包(a→b•)=(与i4相同)< p="">
I4 =转到(I0,b)=闭包(A→b•)= A→b•
I5 =转到(I2,A)=闭包(S→AA•)= SA→A•
I6 =转到(I3,A)=闭包(A→aA•)= A→aA•
DFA包含7个状态I0至I6。
说明:
S → AA ... (1)
A → aA ... (2)
A → b ... (3)