2012-01-29 52 views
4

一个LL我有三个语法:确定语法是否是使用两两不相交测试

A - > AB | b | CBB

B - > aB | ba | aBb

C - > aaA | b |驾驶室

我需要“确定(他们)是LL语法通过执行两两不相交测试,显示第一组的每个非终结点的RHS各的。

这是我迄今为止...

A - > AB | b | CBB

第一(AB)=一个

第一(b)= b

第一(CBB)= AAA =一个

这是我遇到的问题之一。我做了CBB吗?如果是这样,我会说他们相交&规则未通过测试。 (对吧?)

B - > aB | ba | ABB

第一(AB)=一个

第一(BA)= B

第一(ABB)=一个

它们相交&因此规则未通过测试。

C - > aaA | b | CAB

第一(AAA)=一个

第一(B)= B

第一(CAB)= C

它们不相交&因此规则传递

回答

6

点的测试是看看,看看第一个终端,你可以知道使用哪个规则(对LL的要求)。对B来说很明显,有两条规则可以适用于终端a;它也非常明显,C的每个规则从不同的终端开始。您可以看到,C(因此CBB)的可能的第一个终端与A的其他规则重叠。

底线:看起来不错(但是,如果您已停止在CBB的单个终端并且碰巧选择c,你会得出错误的结论)。

+0

这是完美的,谢谢! – tommy1370 2012-01-29 20:27:56

0

我相信FIRST将A规则设置为{a},{b}和{a,b,c}。语法不是LL,因为它至少有一个交点,所以不通过成对不相交测试。实际上,在这种情况下有两个交叉终端,a和b。

相关问题