LL(1)解析表中有多个条目?

时间:2013-05-01 18:41:08

标签: parsing compiler-construction context-free-grammar ll

鉴于这个语法:

  

S→S 1 S 2

     

S 1 →a | ε

     

S 2 →ab | ε

因此,我们有

  

FIRST(S 1 )= {a,ε}

     

关注(S 1 )= {a}

这是否意味着在解析表中我将在S 1 的行和a的列中有多个定义?

1 个答案:

答案 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>

希望这有帮助!