public MaybeBoolean isLL1() {
        final Set<Integer> first1 = a.getFirst();
        final Set<Integer> first2 = b.getFirst();
        final int size1 = first1.size();
        final int size2 = first2.size();
        if (size1 >= 0 || size2 >= 0) {
            int n = size1 + size2;
            boolean unsure = false;
            if (first1.contains(-1)) {
                unsure = true;
                if (first2.contains(-1)) {
                    n--;
                }
            } else {
                if (first2.contains(-1)) {
                    unsure = true;
                }

            }
            if (n == getFirst().size()) {
                if (unsure) {
                    return MaybeBoolean.unsure;
                } else {
                    return MaybeBoolean.t;
                }
            }
        }
        Utils.warning(this, this + " is not LL(1)." + " first[" + a + "]=" + a.getFirst() + ", first[" + b + "]=" + b.getFirst());
        return MaybeBoolean.f;
    }