Parsing 为什么这个语法不是LL(1)
我有下一个语法:Parsing 为什么这个语法不是LL(1),parsing,grammar,Parsing,Grammar,我有下一个语法: C := (PZ) P := X | C X := iQ | eQ | rQ Q := AX | ε A := + L := > Z := LP | AP | ε 我正在使用JFLAP构建LL(1)解析表,但在我键入这些规则的那一刻,JFLAP抛出了一个错误,它说:语法不是LL(1)。我在规则“Q”中找到了错误所在 第一组Q是Q={+,ε},接下来的一组Q是Q={,+,>},在解析表中,我在表[Q,+]中有两个规则,这是错误的,但是我不知道如何修复它,因为我需要规则Q
C := (PZ)
P := X | C
X := iQ | eQ | rQ
Q := AX | ε
A := +
L := >
Z := LP | AP | ε
我正在使用JFLAP构建LL(1)解析表,但在我键入这些规则的那一刻,JFLAP抛出了一个错误,它说:语法不是LL(1)。我在规则“Q”中找到了错误所在
第一组Q是Q={+,ε},接下来的一组Q是Q={,+,>},在解析表中,我在表[Q,+]中有两个规则,这是错误的,但是我不知道如何修复它,因为我需要规则Q->ε基本问题是语法不明确-
X
和Z
有两个嵌套的重复模式,它们都可以匹配i+i
片段。因此,您需要决定如何解决这种不确定性——像i+i
这样的片段应该以哪种方式匹配:
PZ PZ
/ \ / \
X ε X AP
/ \ / \ / \
i Q i Q + X
/ \ / / \
A X ε i Q
/ / \ |
+ i Q ε
|
ε
最简单的修复方法是使其始终匹配正确的示例,您只需去掉X
/Q
重复模式即可:
C := (PZ)
P := X | C
X := i | e | r
A := +
L := >
Z := LP | AP | ε
如果要始终匹配左侧示例,则需要在Z
模式中禁用+
:
C := (PZ)
P := X | C
X := iQ | eQ | rQ
Q := AX | ε
A := +
L := >
Z := LP | ε