this is making me very suspicious that we need a Location class. Something like:

    public final class Location {
        public final int position;
        public final int line;
        public final int column;
    }

Then this would be:

    static final class MetaData {
        public final Location start;
        public final Location end;
    }

You would also replace ParseState and ParseError where these are also used.