public void read() throws IOException {
    var sources = Paths.get(...);

    var resolver = new ParentResolver() {

        @Override
        public Source resolve(String path) throws IOException {
            return Reader.read(sources.resolve(path), this);
        }
    };

    var source = resolver.resolve("vec3f.lady");

    var xyz = source.get("xyz");
    var x = xyz.get("x").asFloat();
    var y = xyz.get("y").asFloat();
    var z = xyz.get("z").asFloat();
}