Parsing LL语法分析器

Parsing LL语法分析器,parsing,grammar,ll,Parsing,Grammar,Ll,我在下面介绍了这个语法,并试图弄清楚是否可以使用LL解析器解析它?如果没有,请解释 S --> ab | cB A --> b | Bb B --> aAb | cC C --> cA | Aba 据我所知,两个集合的交集必须为空才能通过成对不相交测试 但我不知道从哪里开始,我一直在看我的课本,但不能完全理解或找到任何可以遵循的例子。我只需要看看程序或步骤,了解如何处理其他类似的问题。非常感谢您的帮助。计算所有非终端的第一组,并检查给定非终端的备选方案的第一组是否都不相

我在下面介绍了这个语法,并试图弄清楚是否可以使用LL解析器解析它?如果没有,请解释

S --> ab | cB
A --> b | Bb
B --> aAb | cC
C --> cA | Aba
据我所知,两个集合的交集必须为空才能通过成对不相交测试


但我不知道从哪里开始,我一直在看我的课本,但不能完全理解或找到任何可以遵循的例子。我只需要看看程序或步骤,了解如何处理其他类似的问题。非常感谢您的帮助。

计算所有非终端的第一组,并检查给定非终端的备选方案的第一组是否都不相交。如果全部为,则为LL;如果有非端子,则为非LL。如果有任何ε规则,也需要遵循集合


计算FIRST1集非常简单,它会告诉您语法是否为LL(1)。计算FIRSTk集要复杂得多,但它会告诉您,对于计算FIRSTk集的任何特定k,语法是否为LL(k)。

如果存在左递归,则LL(k)解析器无法解析它。@Mephy:不幸的是,相反的说法不成立——即使没有左递归,也可能不是LL(k)B的第一个集合是{a,c},c是{c,B,a},a是{B,a,c}。我这样做对吗?那么现在是什么呢?@JessicaDinh是的,看起来你正确地计算了A、B和C的第一组。因为它们不是不相交的,所以语法是不可解析的。现在,您可以继续为较大的K生成第一组,直到找到合适的K或放弃。您是否必须确定任何K的语法是LL(1)还是LL(K)?