@Override public ImmutableRangeSet<Integer> lookahead(Language lang) { Frequency ff = lang.lali.consumesInput(first); switch (ff) { case NEVER: return lang.lali.lookahead(second); case ALWAYS: return lang.lali.lookahead(first); case SOMETIMES: TreeRangeSet<Integer> r = TreeRangeSet.create(); r.addAll(lang.lali.lookahead(first)); r.addAll(lang.lali.lookahead(second)); return ImmutableRangeSet.copyOf(r); } throw new AssertionError(ff.name()); }
@Override public Frequency consumesInput(Language lang) { Frequency ff = lang.lali.consumesInput(first); switch (ff) { case NEVER: return lang.lali.consumesInput(second); case ALWAYS: return ff; case SOMETIMES: Frequency sf = lang.lali.consumesInput(second); switch (sf) { case ALWAYS: case SOMETIMES: return sf; case NEVER: return Frequency.SOMETIMES; } throw new AssertionError(sf.name()); } throw new AssertionError(ff.name()); }