@NotNull
    @Override
    public Pair<Object, State> parse(@NotNull List<Token<T>> tokens, @NotNull State state) throws ParserException {
      final int pos = state.getPos();
      if (pos >= tokens.size()) {
        return Pair.create(null, state);
      }
      throw new ParserException(String.format("Expected end of input, found %s", tokens.get(pos)), state);
    }
@NotNull
    @Override
    public Pair<Object, State> parse(@NotNull List<Token<T>> tokens, @NotNull State state)