如何检查这个语法是否是SLR(1)?
S' -> S
S -> [ B
A -> int
A -> [ B
B -> ]
B -> C
C -> A ]
C -> A , C首先,我创建了它的自动机,然后计算了非终端的后续集合,然后创建了解析表。我不确定我的自动机是否正确,但是在为SLR(1)语法做了解析表之后,我没有发现任何错误。下面是我在自动机方面的尝试。
I0:
S' -> .S
S -> .[B
I1 (I0 -> S):
S -> [.B
B -> .]
B -> .C
C -> .A]
C -> .A,C
A -> .int
A -> .[B
I3 (I2 -> B)
S -> [B.
I4 (I2 -> ])
B -> ].
I5 (I2 -> C)
B -> C.
I6 (I2 -> A)
C -> A.]
C -> A.,C
I7 (I2 -> int)
A -> int.
I8 (I2 -> [)
A -> [.B
B -> .]
B -> .C
C -> .A]
C -> .A,C
A -> .int
A -> .[B
I8 -> ] = I4
I8 -> C = I5
I8 -> A = I6
I8 -> int = I7
I8 -> [ = I8
I9 (I6 -> ])
C -> A].
I10 (I6 -> ,)
C -> A,.C
C -> .A]
C -> .A,C
A -> .int
A -> .[B
I11 (I8 -> B)
A -> [B.
I12 (I10 -> C)
C -> A,C.
I10 -> A = I6
I10 -> int = I7
I10 -> [ = I8发布于 2020-07-08 12:11:48
考虑到你已经做了艰苦的工作,找到所有的州,现在是时候检查单反(1)的规则。
https://en.wikipedia.org/wiki/SLR_grammar
如您所知,您的问题忽略了规则中强制性的以下()集。
是的,如果存在冲突,您可以在表解析器上找到答案,但这更多地取决于经验而不是实际科学。一个接一个地检查规则,你会没事的:)
根据您确信状态的正确性这一事实,我没有看到移位/减少或减少/减少冲突,所以语法是SLR(1)。
https://stackoverflow.com/questions/59910456
复制相似问题