使用成对不相交测试确定语法是否为LL

tom*_*370 5 grammar disjoint-sets

我有三个语法:

A - > aB | b | CBB

B - > aB | ba | ABB

C - > aaA | b | 出租车

我需要通过执行成对不相交测试来确定[他们]是否是LL语法,显示每个非终结符的每个RHS的第一组.

这就是我到目前为止......

A - > aB | b | CBB

第一个(aB)= a

第一(b)= b

第一个(CBB)= aaA = a

这是我遇到麻烦的那个.我做了正确的CBB吗?如果是这样,我会说它们相交并且规则未通过测试.(对?)

B - > aB | ba | ABB

第一个(aB)= a

第一(ba)= b

第一个(aBb)= a

它们相交,因此规则未通过测试.

C - > aaA | b | 出租车

第一个(aaA)= a

第一(b)= b

第一(caB)= c

他们没有交叉,因此规则通过

Sco*_*ter 7

测试的目的是看看,在查看第一个终端时,您可以判断使用哪个规则(LL的要求).对于B来说很明显,有两个规则可以应用于终端a; 它也非常明显,C的每个规则都以不同的终端开始.并且您可以看到C的可能的第一个终端(以及因此CBB)与A的其他规则重叠.

底线:看起来不错(但是,如果你在CBB的一个终端停了下来并碰巧选择了c,你就会得出错误的结论).