我有三个语法:
A - > aB | b | CBB
B - > aB | ba | ABB
C - > aaA | b | CAB
我需要通过执行成对不相交测试来确定[他们]是否是LL语法,显示每个非终结符的每个RHS的第一组。
这就是我到目前为止......
A - > aB | b | CBB
首先(aB)= a
首先(b)= b
首先(CBB)= aaA = a
这是我遇到麻烦的人。我做了正确的CBB吗?如果是这样,我会说他们相交了规则未通过测试。 (右?)
B - > aB | ba | ABB
首先(aB)= a
first(ba)= b
首先(aBb)= a
他们是交叉的&因此规则未通过测试。
C - > aaA | b | CAB
首先(aaA)= a
首先(b)= b
首先(caB)= c
他们没有相交&因此规则通过
答案 0 :(得分:7)
测试的目的是看看,在查看第一个终端时,您可以判断使用哪个规则(LL的要求)。对于B来说很明显,有两个规则可以应用于终端a;它也非常明显,C的每个规则都以不同的终端开始。你可以看到C(以及CBB)可能的第一个终端与A的其他规则重叠。
底线:看起来不错(但是,如果你在CBB的一个终端停了下来并碰巧选择了c,你就会得出错误的结论)。
答案 1 :(得分:0)
我认为A规则的第一组是{a},{b}和{a,b,c}。语法不是LL,因为它没有通过成对的相交测试,因为至少有一个交叉点。事实上,在这种情况下有两个相交的终端,a和b。