public static Path pathAlt(Path path1, Path path2) { return new P_Alt(path1, path2) ; } public static Path pathSeq(Path path1, Path path2) { return new P_Seq(path1, path2) ; }
@Override public boolean equalTo(Path path2, NodeIsomorphismMap isoMap) { if ( ! ( path2 instanceof P_Alt ) ) return false ; return equalsIso((P_Path2)path2, isoMap) ; }
public static Path pathAlt(Path path1, Path path2) { return new P_Alt(path1, path2) ; } public static Path pathSeq(Path path1, Path path2) { return new P_Seq(path1, path2) ; }
@Override public boolean equalTo(Path path2, NodeIsomorphismMap isoMap) { if ( ! ( path2 instanceof P_Alt ) ) return false ; return equalsIso((P_Path2)path2, isoMap) ; }
@Override public Path make(ItemList list) { BuilderLib.checkLength(3, 3, list, "path alt: wanted 2 arguments") ; Path left = build(list, 1) ; Path right = build(list, 2) ; return new P_Alt(left, right) ; }
public Path make(ItemList list) { BuilderLib.checkLength(3, 3, list, "path alt: wanted 2 arguments") ; Path left = build(list, 1) ; Path right = build(list, 2) ; return new P_Alt(left, right) ; }
@Override public void visit(P_Alt p) { p.getLeft().visit(this); Element left = result; if (left!=null) { p.getRight().visit(this); Element right = result; if (right!=null) { ElementUnion ret = new ElementUnion(left); ret.addElement(right); result = ret; } else { result = null; } } else { result = null; } }
@Override public void visit(P_Alt p) { p.getLeft().visit(this); List<Rule> left = result; Predicate leftPred = resultMainPredicate; p.getRight().visit(this); List<Rule> right = result; Predicate rightPred = resultMainPredicate; List<Rule> rules = new LinkedList<Rule>(); rules.addAll(left); rules.addAll(right); Predicate newpred = new Predicate(idpPredicateGen.createNewVariable(), 2); VariableExpr x = new VariableExpr("X"); VariableExpr y = new VariableExpr("Y"); // add : newpred(x, y) :- leftpred(x, y) rules.add( new Rule(new AtomicFormula(newpred, x, y), ruleid++, new AtomicFormula(leftPred, x, y))); // add : newpred(x, y) :- leftpred(x, y) rules.add( new Rule(new AtomicFormula(newpred, x, y), ruleid++, new AtomicFormula(rightPred, x, y))); result = rules; resultMainPredicate = newpred; }