Search in sources :

Example 1 with XPair

use of catdata.fpql.XExp.XPair in project fql by CategoricalData.

the class XParser method toExp.

private static XExp toExp(Object c) {
    if (c instanceof String) {
        return new Var((String) c);
    }
    try {
        return fromPoly((Tuple4) c);
    } catch (Exception e) {
    }
    try {
        return fromSoed(c);
    } catch (Exception e) {
    }
    try {
        return toCatConst(c);
    } catch (Exception e) {
    }
    try {
        if (c.toString().contains("variables")) {
            return toInstConst(c);
        }
    } catch (Exception e) {
    }
    try {
        return toMapping(c);
    } catch (Exception e) {
    }
    try {
        return toTrans(c);
    } catch (Exception e) {
    }
    if (c instanceof Tuple5) {
        Tuple5 p = (Tuple5) c;
        if (p.c.toString().equals("+")) {
            return new XCoprod(toExp(p.b), toExp(p.d));
        }
        if (p.c.toString().equals("*")) {
            return new XTimes(toExp(p.b), toExp(p.d));
        }
        if (p.c.toString().equals(";")) {
            return new Compose(toExp(p.b), toExp(p.d));
        }
        if (p.a.toString().equals("return") && p.b.toString().equals("sigma")) {
            return new XUnit("sigma", toExp(p.d), toExp(p.e));
        }
        if (p.a.toString().equals("coreturn") && p.b.toString().equals("sigma")) {
            return new XCounit("sigma", toExp(p.d), toExp(p.e));
        }
        if (p.a.toString().equals("return") && p.b.toString().equals("delta")) {
            return new XUnit("pi", toExp(p.d), toExp(p.e));
        }
        if (p.a.toString().equals("coreturn") && p.b.toString().equals("delta")) {
            return new XCounit("pi", toExp(p.d), toExp(p.e));
        }
        return new XFn((String) p.b, (String) p.d, (String) p.e);
    }
    if (c instanceof Tuple4) {
        Tuple4 p = (Tuple4) c;
        return new XEq((List<String>) p.b, (List<String>) p.d);
    }
    if (c instanceof Tuple3) {
        Tuple3 p = (Tuple3) c;
        if (p.a.toString().equals("flower")) {
            XExp I = toExp(p.c);
            Tuple3 q = (Tuple3) p.b;
            // list of tuple3 of (path, string)
            List s = (List) ((org.jparsec.functors.Pair) q.a).b;
            // list of tuple3 of (string, string)
            List f = (List) ((org.jparsec.functors.Pair) q.b).b;
            // list of tuple3 of (path, path)
            List w = (List) ((org.jparsec.functors.Pair) q.c).b;
            Map<Object, List<Object>> select = new HashMap<>();
            Map<Object, Object> from = new HashMap<>();
            List<Pair<List<Object>, List<Object>>> where = new LinkedList<>();
            Set<String> seen = new HashSet<>();
            for (Object o : w) {
                Tuple3 t = (Tuple3) o;
                List lhs = (List) t.a;
                List rhs = (List) t.c;
                where.add(new Pair<>(rhs, lhs));
            }
            for (Object o : s) {
                Tuple3 t = (Tuple3) o;
                List lhs = (List) t.a;
                String rhs = t.c.toString();
                if (seen.contains(rhs)) {
                    throw new RuntimeException("Duplicate AS name: " + rhs + " (note: AS names can't be used in the schema either)");
                }
                seen.add(rhs);
                select.put(rhs, lhs);
            }
            for (Object o : f) {
                Tuple3 t = (Tuple3) o;
                String lhs = t.a.toString();
                String rhs = t.c.toString();
                if (seen.contains(rhs)) {
                    throw new RuntimeException("Duplicate AS name: " + rhs + " (note: AS names can't be used in the schema either)");
                }
                seen.add(rhs);
                from.put(rhs, lhs);
            }
            return new Flower(select, from, where, I);
        }
        if (p.a.toString().equals("FLOWER")) {
            XExp I = toExp(p.c);
            Tuple3 q = (Tuple3) p.b;
            // list of tuple3 of (path, string)
            List s = (List) ((org.jparsec.functors.Pair) q.a).b;
            // list of tuple3 of (string, string)
            List f = (List) ((org.jparsec.functors.Pair) q.b).b;
            // list of tuple3 of (path, path)
            Object w = ((org.jparsec.functors.Pair) q.c).b;
            Map<Object, List<Object>> select = new HashMap<>();
            Map<Object, Object> from = new HashMap<>();
            // List<Pair<List<String>, List<String>>> where = new LinkedList<>();
            Set<String> seen = new HashSet<>();
            for (Object o : s) {
                Tuple3 t = (Tuple3) o;
                List lhs = (List) t.a;
                String rhs = t.c.toString();
                if (seen.contains(rhs)) {
                    throw new RuntimeException("Duplicate AS name: " + rhs + " (note: AS names can't be used in the schema either)");
                }
                seen.add(rhs);
                select.put(rhs, lhs);
            }
            for (Object o : f) {
                Tuple3 t = (Tuple3) o;
                String lhs = t.a.toString();
                String rhs = t.c.toString();
                if (seen.contains(rhs)) {
                    throw new RuntimeException("Duplicate AS name: " + rhs + " (note: AS names can't be used in the schema either)");
                }
                seen.add(rhs);
                from.put(rhs, lhs);
            }
            return new FLOWER2(select, from, toWhere(w), I);
        }
        if (p.a.toString().equals("pushout")) {
            return new XPushout(toExp(p.b), toExp(p.c));
        }
        if (p.a.toString().equals("hom")) {
            return new XToQuery(toExp(p.b), toExp(p.c));
        }
        if (p.a.toString().equals("sigma")) {
            return new XSigma(toExp(p.b), toExp(p.c));
        }
        if (p.a.toString().equals("delta")) {
            return new XDelta(toExp(p.b), toExp(p.c));
        }
        if (p.a.toString().equals("pi")) {
            return new XPi(toExp(p.b), toExp(p.c));
        }
        if (p.a.toString().equals("inl")) {
            return new XInj(toExp(p.b), toExp(p.c), true);
        }
        if (p.a.toString().equals("inr")) {
            return new XInj(toExp(p.b), toExp(p.c), false);
        }
        if (p.a.toString().equals("case")) {
            return new XMatch(toExp(p.b), toExp(p.c));
        }
        if (p.a.toString().equals("fst")) {
            return new XProj(toExp(p.b), toExp(p.c), true);
        }
        if (p.a.toString().equals("snd")) {
            return new XProj(toExp(p.b), toExp(p.c), false);
        }
        if (p.a.toString().equals("pair")) {
            return new XPair(toExp(p.b), toExp(p.c));
        }
        if (p.a.toString().equals("apply")) {
            return new Apply(toExp(p.b), toExp(p.c));
        }
        if (p.a.toString().equals("coapply")) {
            return new XCoApply(toExp(p.b), toExp(p.c));
        }
        return new XConst((String) p.b, (String) p.c);
    }
    if (c instanceof org.jparsec.functors.Pair) {
        org.jparsec.functors.Pair p = (org.jparsec.functors.Pair) c;
        if (p.a.toString().equals("idpoly")) {
            return new XIdPoly(toExp(p.b));
        }
        if (p.a.toString().equals("uberpi")) {
            return new XUberPi(toExp(p.b));
        }
        if (p.a.toString().equals("labels")) {
            return new XLabel(toExp(p.b));
        }
        if (p.a.toString().equals("grothlabels")) {
            return new XGrothLabels(toExp(p.b));
        }
        if (p.a.toString().equals("relationalize")) {
            return new XRel(toExp(p.b));
        }
        if (p.a.toString().equals("void")) {
            return new XVoid(toExp(p.b));
        }
        if (p.a.toString().equals("ff")) {
            return new XFF(toExp(p.b));
        }
        if (p.a.toString().equals("unit")) {
            return new XOne(toExp(p.b));
        }
        if (p.a.toString().equals("tt")) {
            return new XTT(toExp(p.b));
        }
        if (p.a.toString().equals("id")) {
            return new Id(false, toExp(p.b));
        }
        if (p.a.toString().equals("ID")) {
            return new Id(true, toExp(p.b));
        } else // if (p.a.toString().equals("query")) {
        // Tuple3 t = (Tuple3) p.b;
        // return new XExp.XQueryExp(toExp(t.a), toExp(t.b), toExp(t.c));
        // }
        {
            try {
                return fromSuperSoed(c);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return new XTy((String) p.b);
        }
    }
    throw new RuntimeException("x: " + c.getClass() + " " + c);
}
Also used : HashMap(java.util.HashMap) Var(catdata.fpql.XExp.Var) XCoApply(catdata.fpql.XExp.XCoApply) Apply(catdata.fpql.XExp.Apply) XRel(catdata.fpql.XExp.XRel) XVoid(catdata.fpql.XExp.XVoid) FLOWER2(catdata.fpql.XExp.FLOWER2) Compose(catdata.fpql.XExp.Compose) XFF(catdata.fpql.XExp.XFF) List(java.util.List) LinkedList(java.util.LinkedList) XToQuery(catdata.fpql.XExp.XToQuery) HashSet(java.util.HashSet) XIdPoly(catdata.fpql.XExp.XIdPoly) XCounit(catdata.fpql.XExp.XCounit) XEq(catdata.fpql.XExp.XEq) XProj(catdata.fpql.XExp.XProj) LinkedList(java.util.LinkedList) XPair(catdata.fpql.XExp.XPair) XCoApply(catdata.fpql.XExp.XCoApply) XTimes(catdata.fpql.XExp.XTimes) Id(catdata.fpql.XExp.Id) XSigma(catdata.fpql.XExp.XSigma) XFn(catdata.fpql.XExp.XFn) XInj(catdata.fpql.XExp.XInj) XOne(catdata.fpql.XExp.XOne) XUberPi(catdata.fpql.XExp.XUberPi) XDelta(catdata.fpql.XExp.XDelta) XMatch(catdata.fpql.XExp.XMatch) XTT(catdata.fpql.XExp.XTT) XGrothLabels(catdata.fpql.XExp.XGrothLabels) Pair(catdata.Pair) XPair(catdata.fpql.XExp.XPair) Flower(catdata.fpql.XExp.Flower) XConst(catdata.fpql.XExp.XConst) Tuple4(org.jparsec.functors.Tuple4) XPi(catdata.fpql.XExp.XPi) Tuple5(org.jparsec.functors.Tuple5) XCoprod(catdata.fpql.XExp.XCoprod) Tuple3(org.jparsec.functors.Tuple3) XPushout(catdata.fpql.XExp.XPushout) XLabel(catdata.fpql.XExp.XLabel) XUnit(catdata.fpql.XExp.XUnit) XTy(catdata.fpql.XExp.XTy)

Example 2 with XPair

use of catdata.fpql.XExp.XPair in project fql by CategoricalData.

the class XChecker method visit.

@Override
public Pair<XExp, XExp> visit(Map<String, XExp> env, XPair e) {
    Pair<XExp, XExp> l = e.l.accept(env, this);
    Pair<XExp, XExp> r = e.r.accept(env, this);
    if (!l.first.equals(r.first)) {
        throw new RuntimeException("sources of " + e + " not equal: " + l.second + " and " + r.second);
    }
    return new Pair<>(r.first, new XTimes(l.second, r.second));
}
Also used : XTimes(catdata.fpql.XExp.XTimes) Pair(catdata.Pair) XPair(catdata.fpql.XExp.XPair)

Aggregations

Pair (catdata.Pair)2 XPair (catdata.fpql.XExp.XPair)2 XTimes (catdata.fpql.XExp.XTimes)2 Apply (catdata.fpql.XExp.Apply)1 Compose (catdata.fpql.XExp.Compose)1 FLOWER2 (catdata.fpql.XExp.FLOWER2)1 Flower (catdata.fpql.XExp.Flower)1 Id (catdata.fpql.XExp.Id)1 Var (catdata.fpql.XExp.Var)1 XCoApply (catdata.fpql.XExp.XCoApply)1 XConst (catdata.fpql.XExp.XConst)1 XCoprod (catdata.fpql.XExp.XCoprod)1 XCounit (catdata.fpql.XExp.XCounit)1 XDelta (catdata.fpql.XExp.XDelta)1 XEq (catdata.fpql.XExp.XEq)1 XFF (catdata.fpql.XExp.XFF)1 XFn (catdata.fpql.XExp.XFn)1 XGrothLabels (catdata.fpql.XExp.XGrothLabels)1 XIdPoly (catdata.fpql.XExp.XIdPoly)1 XInj (catdata.fpql.XExp.XInj)1