首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查语法是否为SLR(1)?

如何检查语法是否为SLR(1)?
EN

Stack Overflow用户
提问于 2020-01-25 15:03:10
回答 1查看 2.5K关注 0票数 0

如何检查这个语法是否是SLR(1)?

代码语言:javascript
复制
    S' -> S
    S -> [ B
    A -> int
    A -> [ B
    B -> ]
    B -> C
    C -> A ]
    C -> A , C

首先,我创建了它的自动机,然后计算了非终端的后续集合,然后创建了解析表。我不确定我的自动机是否正确,但是在为SLR(1)语法做了解析表之后,我没有发现任何错误。下面是我在自动机方面的尝试。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-07-08 12:11:48

考虑到你已经做了艰苦的工作,找到所有的州,现在是时候检查单反(1)的规则。

https://en.wikipedia.org/wiki/SLR_grammar

如您所知,您的问题忽略了规则中强制性的以下()集。

是的,如果存在冲突,您可以在表解析器上找到答案,但这更多地取决于经验而不是实际科学。一个接一个地检查规则,你会没事的:)

根据您确信状态的正确性这一事实,我没有看到移位/减少或减少/减少冲突,所以语法是SLR(1)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59910456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档