我有下一个语法:
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 - > ε
答案 0 :(得分:1)
基本问题是你的语法含糊不清 - 你有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 | ε