use of org.jparsec.functors.Tuple4 in project fql by CategoricalData.
the class FQLParser method program.
@SuppressWarnings({ "rawtypes", "unchecked" })
public static FQLProgram program(String s) {
List<NewDecl> ret = new LinkedList<>();
List decls = (List) program.parse(s);
for (Object d : decls) {
org.jparsec.functors.Pair pr = (org.jparsec.functors.Pair) d;
Object decl = pr.b;
String txt = pr.a.toString();
int idx = s.indexOf(txt);
if (idx < 0) {
throw new RuntimeException();
}
if (decl instanceof org.jparsec.functors.Pair) {
org.jparsec.functors.Pair p = (org.jparsec.functors.Pair) decl;
if (p.a.toString().equals("drop")) {
ret.add(NewDecl.dropDecl((List<String>) p.b));
continue;
}
}
Tuple3 t = (Tuple3) decl;
String kind = t.a.toString();
switch(kind) {
case "enum":
Tuple4 tte = (Tuple4) decl;
String name = (String) tte.b;
List<String> values = (List<String>) tte.d;
ret.add(NewDecl.typeDecl(name, values, idx));
break;
case "query":
Tuple4 tta = (Tuple4) decl;
name = (String) tta.b;
ret.add(NewDecl.queryDecl(name, idx, toQuery(tta.d)));
break;
case "QUERY":
tta = (Tuple4) decl;
name = (String) tta.b;
ret.add(NewDecl.fullQuery(name, toFullQuery(tta.d), idx));
break;
case "schema":
Tuple4 tt = (Tuple4) decl;
name = (String) tt.b;
ret.add(NewDecl.sigDecl(name, idx, toSchema(tt.d)));
break;
case "instance":
Tuple4 tt0 = (Tuple4) decl;
name = (String) t.b;
NewDecl toAdd = NewDecl.instDecl(name, idx, toInst(tt0.d));
ret.add(toAdd);
break;
case "mapping":
Tuple4 t0 = (Tuple4) decl;
name = (String) t.b;
ret.add(NewDecl.mapDecl(name, idx, toMapping(t0.d)));
break;
case "transform":
Tuple4 tx = (Tuple4) decl;
name = (String) tx.b;
ret.add(NewDecl.transDecl(name, idx, toTrans(tx.d)));
break;
default:
throw new RuntimeException("Unknown decl: " + kind);
}
}
return new FQLProgram(ret);
}
use of org.jparsec.functors.Tuple4 in project fql by CategoricalData.
the class FQLParser method toInst.
@SuppressWarnings("rawtypes")
private static InstExp toInst(Object o) {
try {
Tuple4 t = (Tuple4) o;
Token z = (Token) t.a;
String y = z.toString();
if (y.equals("step")) {
return new Step(t.d.toString(), toMapping(t.b), toMapping(t.c));
}
} catch (RuntimeException cce) {
}
try {
Tuple3 t = (Tuple3) o;
Token z = (Token) t.a;
String y = z.toString();
switch(y) {
case "delta":
return new InstExp.Delta(toMapping(t.b), t.c.toString());
case "sigma":
return new InstExp.Sigma(toMapping(t.b), t.c.toString());
case "SIGMA":
return new FullSigma(toMapping(t.b), t.c.toString());
case "pi":
return new InstExp.Pi(toMapping(t.b), t.c.toString());
case "external":
return new External(toSchema(t.b), t.c.toString());
case "eval":
return new Eval(toQuery(t.b), t.c.toString());
case "EVAL":
return new FullEval(toFullQuery(t.b), t.c.toString());
default:
break;
}
} catch (RuntimeException cce) {
}
try {
Tuple3 t = (Tuple3) o;
Token z = (Token) t.b;
String y = z.toString();
if (y.equals("+")) {
return new Plus(t.a.toString(), t.c.toString());
} else if (y.equals("*")) {
return new Times(t.a.toString(), t.c.toString());
}
if (y.equals("^")) {
return new Exp(t.a.toString(), (t.c).toString());
}
} catch (RuntimeException cce) {
}
try {
org.jparsec.functors.Pair pr = (org.jparsec.functors.Pair) o;
if (pr.a.toString().equals("unit")) {
return new One(toSchema(pr.b));
} else if (pr.a.toString().equals("void")) {
return new Zero(toSchema(pr.b));
} else if (pr.a.toString().equals("prop")) {
return new Two(toSchema(pr.b));
} else if (pr.a.toString().equals("relationalize")) {
return new Relationalize(pr.b.toString());
} else if (pr.a.toString().equals("kernel")) {
return new Kernel(pr.b.toString());
}
throw new RuntimeException();
} catch (RuntimeException cce) {
}
return toInstConst(o);
}
use of org.jparsec.functors.Tuple4 in project fql by CategoricalData.
the class FQLParser method toTrans.
@SuppressWarnings("rawtypes")
private static TransExp toTrans(Object o) {
try {
Tuple4 p = (Tuple4) o;
String src = p.b.toString();
String dst = p.c.toString();
TransExp h = toTrans(p.d);
String kind = p.a.toString();
switch(kind) {
case "delta":
return new TransExp.Delta(h, src, dst);
case "pi":
return new TransExp.Pi(h, src, dst);
case "sigma":
return new TransExp.Sigma(h, src, dst);
case "relationalize":
return new TransExp.Relationalize(h, src, dst);
default:
throw new RuntimeException(o.toString());
}
} catch (RuntimeException ex) {
}
try {
Tuple4 p = (Tuple4) o;
String src = p.b.toString();
String dst = p.c.toString();
String name = p.d.toString();
String kind = p.a.toString();
switch(kind) {
case "external":
return new TransExp.External(src, dst, name);
case "SIGMA":
return new TransExp.FullSigma(name, src, dst);
default:
throw new RuntimeException(o.toString());
}
} catch (RuntimeException ex) {
}
try {
Tuple4 p = (Tuple4) o;
String obj = p.a.toString();
String dst = p.d.toString();
if (p.c.toString().equals("void")) {
return new TransExp.FF(obj, dst);
} else if (p.c.toString().equals("unit")) {
return new TransExp.TT(obj, dst);
} else if (p.c.toString().equals("curry")) {
return new TransCurry(obj, dst);
} else if (p.c.toString().equals("true")) {
return new Bool(true, dst, obj);
} else if (p.c.toString().equals("false")) {
return new Bool(false, dst, obj);
} else if (p.c.toString().equals("char")) {
return new Chi(obj, dst);
}
} catch (RuntimeException re) {
}
try {
Tuple3 p = (Tuple3) o;
Object p2 = p.b;
Object p3 = p.c;
Object o1 = p.a;
String p1 = p.a.toString();
if (p1.equals("iso1")) {
return new TransIso(true, p2.toString(), p3.toString());
} else if (p1.equals("iso2")) {
return new TransIso(false, p2.toString(), p3.toString());
} else if (p3.toString().equals("fst")) {
return new TransExp.Fst(p1);
} else if (p3.toString().equals("not")) {
return new Not(p1);
} else if (p3.toString().equals("and")) {
return new And(p1);
} else if (p3.toString().equals("or")) {
return new Or(p1);
} else if (p3.toString().equals("implies")) {
return new Implies(p1);
} else if (p3.toString().equals("eval")) {
return new TransEval(p1);
} else if (p3.toString().equals("relationalize")) {
return new Squash(p1);
} else if (p3.toString().equals("snd")) {
return new TransExp.Snd(p1);
} else if (p3.toString().equals("return")) {
return new Return(p1);
} else if (p3.toString().equals("coreturn")) {
return new Coreturn(p1);
} else if (p3.toString().equals("inl")) {
return new TransExp.Inl(p1);
} else if (p3.toString().equals("kernel")) {
return new UnChi(p1);
} else if (p3.toString().equals("inr")) {
return new TransExp.Inr(p1);
} else if (p2.toString().equals("then")) {
return new TransExp.Comp(toTrans(o1), toTrans(p3));
} else if (p3 instanceof Tuple3) {
Tuple3 y = (Tuple3) p3;
String x = y.b.toString();
switch(x) {
case "+":
return new TransExp.Case(p1, toTrans(y.a), toTrans(y.c));
case "*":
return new TransExp.Prod(p1, toTrans(y.a), toTrans(y.c));
// return new TransExp.(p1, toTrans(y.a), toTrans(y.c));
default:
throw new RuntimeException("foo");
}
}
} catch (RuntimeException re) {
}
try {
Tuple5 p = (Tuple5) o;
Object p2 = p.c;
Object p3 = p.e;
Object o1 = p.a;
return toTransConst(o1, p2.toString(), p3.toString());
} catch (RuntimeException re) {
}
try {
org.jparsec.functors.Pair p = (org.jparsec.functors.Pair) o;
String p1 = p.a.toString();
Object p2 = p.b;
if (p1.equals("id")) {
return new TransExp.Id(p2.toString());
}
} catch (RuntimeException re) {
}
if (o instanceof String) {
return new TransExp.Var(o.toString());
}
throw new RuntimeException();
}
use of org.jparsec.functors.Tuple4 in project fql by CategoricalData.
the class PPParser method toTrans.
// : ** notation
private static TransExp toTrans(Object o) {
try {
Tuple5 t = (Tuple5) o;
if (t.a.toString().equals("apply")) {
FunctorExp f = toFtr(t.b);
if (t.d.toString().equals("arrow")) {
TransExp e = toTrans(t.e);
return new TransExp.Apply(f, e);
} else {
Tuple3 t3 = (Tuple3) t.e;
List<String> l = (List<String>) t3.a;
return new ApplyPath(f, l.remove(0), l, toCat(t3.c));
}
}
Tuple5 a = (Tuple5) t.c;
Tuple5 b = (Tuple5) t.e;
if (a.c.toString().equals("Set") && a.e.toString().equals("Set") && b.c.toString().equals("Set") && b.e.toString().equals("Set")) {
Tuple3 z = (Tuple3) ((org.jparsec.functors.Pair) t.a).b;
FunctorExp src = toFtr(a.a);
FunctorExp dst = toFtr(b.a);
String ob = z.a.toString();
FnExp fun = toFn(z.c);
return new SetSet(ob, fun, src, dst);
} else if (a.e.toString().equals("Set") && b.e.toString().equals("Set")) {
FunctorExp src = toFtr(a.a);
FunctorExp dst = toFtr(b.a);
List<Object> ob = (List<Object>) ((org.jparsec.functors.Pair) t.a).b;
Map<String, Chc<FnExp, SetExp>> fun = new HashMap<>();
for (Object ttt : ob) {
if (fun.containsKey(o)) {
throw new RuntimeException("Duplicate arrow: " + ttt + " in " + o);
}
Tuple3 u = (Tuple3) ttt;
String n = (String) u.a;
try {
fun.put(n, Chc.inLeft(toFn(u.c)));
} catch (Exception yyy) {
fun.put(n, Chc.inRight(toSet(u.c)));
}
}
return new ToSet(fun, src, dst);
} else if (a.e.toString().equals("Cat") && b.e.toString().equals("Cat")) {
FunctorExp src = toFtr(a.a);
FunctorExp dst = toFtr(b.a);
List<Object> ob = (List<Object>) ((org.jparsec.functors.Pair) t.a).b;
Map<String, FunctorExp> fun = new HashMap<>();
for (Object ttt : ob) {
if (fun.containsKey(o)) {
throw new RuntimeException("Duplicate arrow: " + ttt + " in " + o);
}
Tuple3 u = (Tuple3) ttt;
String n = (String) u.a;
fun.put(n, toFtr(u.c));
}
return new ToCat(fun, src, dst);
} else {
try {
FunctorExp src = toFtr(a.a);
FunctorExp dst = toFtr(b.a);
List<Object> ob = (List<Object>) ((org.jparsec.functors.Pair) t.a).b;
Map<String, TransExp> fun = new HashMap<>();
for (Object ttt : ob) {
if (fun.containsKey(o)) {
throw new RuntimeException("Duplicate arrow: " + ttt + " in " + o);
}
Tuple3 u = (Tuple3) ttt;
String n = (String) u.a;
fun.put(n, toTrans(u.c));
}
return new ToInst(fun, src, dst);
} catch (Exception ex) {
}
FunctorExp src = toFtr(a.a);
FunctorExp dst = toFtr(b.a);
List<Object> ob = (List<Object>) ((org.jparsec.functors.Pair) t.a).b;
Map<String, Pair<String, List<String>>> fun = new HashMap<>();
for (Object ttt : ob) {
if (fun.containsKey(o)) {
throw new RuntimeException("Duplicate arrow: " + ttt + " in " + o);
}
Tuple3 u = (Tuple3) ttt;
String n = (String) u.a;
List<String> l = (List<String>) u.c;
String ll = l.remove(0);
fun.put(n, new Pair<>(ll, l));
}
return new ToMap(fun, src, dst, toCat(a.c), toCat(a.e));
}
} catch (Exception re) {
}
try {
Tuple4 t = (Tuple4) o;
if (t.a.toString().equals("return") || t.a.toString().equals("coreturn")) {
return new Adj(t.a.toString(), t.b.toString(), t.c.toString(), toFtr(t.d));
} else if (t.a.toString().equals("left")) {
return new Whisker(true, toFtr(t.c), toTrans(t.d));
} else if (t.a.toString().equals("right")) {
return new Whisker(false, toFtr(t.c), toTrans(t.d));
} else if (t.a.toString().equals("APPLY")) {
return new PeterApply(t.d.toString(), toTrans(t.b));
} else {
return new ApplyTrans(toTrans(t.b), toFtr(t.d));
}
} catch (Exception re) {
}
try {
Tuple3 p = (Tuple3) o;
Object p2 = p.b;
Object p3 = p.c;
Object o1 = p.a;
if (p2.toString().equals(";")) {
return new TransExp.Comp(toTrans(o1), toTrans(p3));
} else if (o1.toString().equals("fst")) {
return new Proj(toFtr(p2), toFtr(p3), true);
} else if (o1.toString().equals("snd")) {
return new Proj(toFtr(p2), toFtr(p3), false);
} else if (o1.toString().equals("inl")) {
return new Inj(toFtr(p2), toFtr(p3), true);
} else if (o1.toString().equals("inr")) {
return new Inj(toFtr(p2), toFtr(p3), false);
} else if (o1.toString().equals("eval")) {
return new TransExp.Eval(toFtr(p2), toFtr(p3));
} else if (p2.toString().equals("*")) {
return new TransExp.Prod(toTrans(o1), toTrans(p3));
} else if (p2.toString().equals("+")) {
return new CoProd(toTrans(o1), toTrans(p3));
} else if (o1.toString().equals("iso1")) {
return new TransExp.Iso(true, toFtr(p2), toFtr(p3));
} else if (o1.toString().equals("iso2")) {
return new TransExp.Iso(false, toFtr(p2), toFtr(p3));
}
} catch (RuntimeException re) {
}
try {
org.jparsec.functors.Pair p = (org.jparsec.functors.Pair) o;
String p1 = p.a.toString();
Object p2 = p.b;
switch(p1) {
case "id":
return new TransExp.Id(toFtr(p2));
case "tt":
return new TransExp.One(toFtr(p2));
case "ff":
return new TransExp.Zero(toFtr(p2));
case "curry":
return new TransExp.Curry(toTrans(p2), true);
case "CURRY":
return new TransExp.Curry(toTrans(p2), false);
case "true":
return new Bool(true, toCat(p2));
case "false":
return new Bool(false, toCat(p2));
case "char":
return new Chr(toTrans(p2));
case "kernel":
return new Ker(toTrans(p2));
case "not":
case "and":
case "implies":
case "or":
return new AndOrNotImplies(p1, toCat(p2));
default:
break;
}
} catch (RuntimeException re) {
}
if (o instanceof String) {
return new TransExp.Var(o.toString());
}
throw new RuntimeException("Could not create transform from " + o);
}
use of org.jparsec.functors.Tuple4 in project fql by CategoricalData.
the class PPParser method program.
public static FQLPPProgram program(String s) {
List<NewDecl> ret = new LinkedList<>();
List decls = (List) program.parse(s);
for (Object d : decls) {
org.jparsec.functors.Pair pr = (org.jparsec.functors.Pair) d;
Object decl = pr.b;
String txt = pr.a.toString();
int idx = s.indexOf(txt);
if (idx < 0) {
throw new RuntimeException();
}
Tuple3 t = (Tuple3) decl;
String kind = t.a.toString();
String name = t.b.toString();
switch(kind) {
case "set":
Tuple4 tt = (Tuple4) decl;
// name = (String) t.b;
ret.add(NewDecl.setDecl(name, idx, toSet(tt.d)));
break;
case "function":
Tuple4 t0 = (Tuple4) decl;
// name = (String) t.b;
ret.add(NewDecl.fnDecl(name, idx, toFn(t0.d)));
break;
case "functor":
Tuple4 ti = (Tuple4) decl;
// name = (String) t.b;
ret.add(NewDecl.ftrDecl(name, idx, toFtr(ti.d)));
break;
case "category":
Tuple4 tx = (Tuple4) decl;
// name = (String) t.b;
ret.add(NewDecl.catDecl(name, idx, toCat(tx.d)));
break;
case "transform":
Tuple4 te = (Tuple4) decl;
// name = (String) t.b;
ret.add(NewDecl.transDecl(name, idx, toTrans(te.d)));
break;
default:
throw new RuntimeException("Unknown decl: " + kind);
}
}
return new FQLPPProgram(ret);
}
Aggregations