在 LL(1)文法中,为什么要求同一非终结符的多个候选式的 FIRST 集的交 集为空?
时间: 2023-06-15 22:04:38 浏览: 219
LL(1)文法是一类特殊的上下文无关文法,它可以被用于构建递归下降分析器。在LL(1)文法中,为了避免产生二义性,同一个非终结符的不同候选式必须满足FIRST集的交集为空。
这是因为在递归下降分析器中,为了选择正确的产生式,需要先预测下一个终结符号。如果同一个非终结符有多个产生式可以被选择,那么这个预测就不准确了,会出现二义性。
因此,为了避免这种情况,我们要求同一个非终结符的多个候选式的FIRST集的交集为空。这意味着任何时候,只有一个候选式可以被选择,从而消除了二义性。
相关问题
LL(1)文法,若非终结符有多个候选式,则所有候选式的FIRST集的交集为空集吗
不一定。如果一个非终结符的多个候选式的FIRST集存在交集,则这个文法不是LL(1)文法,因为在LL(1)分析过程中,需要通过读取输入符号来选择正确的候选式,而如果存在交集,则无法确定应该选择哪个候选式。但是,如果对于一个非终结符的多个候选式,它们的FIRST集的交集为空集,则这个文法可以是LL(1)文法。这是因为在这种情况下,对于任何一个输入符号,都只有一个候选式的FIRST集包含这个符号,因此可以唯一确定应该选择哪个候选式。
该文法中每一个非终结符M,T,B,D的各个产生式的候选首符集两两不相交。 3. 该文法的非终结符T、B和D,它们都有候选式,而且 FIRST(T)∩FOLLOW(T)={ a,b,e,d }≠ 所以该文法不是LL(1)文法。(2分)
判断该文法是否是LL(1)文法,需要满足以下三个条件:
1. 消除左递归
2. 消除公共左因子
3. 构造预测分析表时,每个非终结符的任意两个产生式不能有相同的前缀,或者说,对于任意一个非终结符A,它的任意两个产生式B -> α 和 B -> β 的选择符集合First(α)和First(β)没有交集,或者是,如果β可以推导出空串,则First(α)和Follow(B)没有交集。
根据题目所给信息,可以知道该文法满足条件1和条件2,但是不满足条件3。因为非终结符T的产生式中包含了空串,所以它的FOLLOW集合应该包括它的产生式右侧所紧随的终结符或者非终结符的FIRST集合。而根据题目所给信息,FOLLOW(T)应该包括{a, b, e, d},但是在该文法中,D的产生式右侧有一个产生空串的产生式,所以D的FIRST集合也包括了空串,所以FOLLOW(T)应该包括D的FOLLOW集合,即{a, b, e, d}∪FOLLOW(D)。因此,T的FOLLOW集合应该是{a, b, d, e, f},而不是{a, b, e, d},与题目所给信息矛盾。因此,该文法不是LL(1)文法。
阅读全文