public MaybeBoolean isLL1() {
        int sizes = 0;
        boolean unsure = false;
        for(Production a: disjuncts) {
            final Set<Integer> first1 = a.getFirst();
            final int size1 = first1.size();
            if (size1 >= 0) {
                sizes += size1;
                if (first1.contains(-1)) {
                    if(unsure) {
                        sizes--;
                    } else {
                        unsure = true;
                    }
                }
            }
        }
        if (sizes == getFirst().size()) {
            if (unsure) {
                return MaybeBoolean.unsure;
            } else {
                return MaybeBoolean.t;
            }
        } else {
            Utils.warning(this, this + " is not LL(1)."/* + " first[" + a + "]=" + a.getFirst() + ", first[" + b + "]=" + b.getFirst()*/);
            return MaybeBoolean.f;
        }
    }