@Override public Token produce(final T reader, final P productionStack, final B builder) { for (; ; ) { final Token token = reader.peek(); if (token == null || token == EndOfStreamToken.EOS) { return EndOfStreamToken.EOS; } else if (token.type().isWhitespace()) { reader.next(); // Discard Whitespace } else { this.p.produce(reader, productionStack, builder); return null; } } }