鉴于这个语法:
S→S 1 S 2
S 1 →a | ε
S 2 →ab | ε
因此,我们有
FIRST(S 1 )= {a,ε}
关注(S 1 )= {a}
这是否意味着在解析表中我将在S 1 的行和a
的列中有多个定义?
答案 0 :(得分:1)
是的,这是正确的。 (但请注意,您的FOLLOW设置错误;它还包含输入结束标记$)。这里的问题是,如果解析器看到a
,它无法判断是否是因为它想要使用派生
S→S 1 S 2 →a S 2
或推导
S→S 1 S 2 →S 2 →ab
要解决此问题,您可以注意到您的语法只生成字符串{a,ab,aab}。因此,您可以为直接生成这三个字符串的语言语法构建LL(1):
S→aY
Y→ε| AZ
Z→ε| B'/ P>
希望这有帮助!