private CUDDNode GetCuddNode(PlanningParser.GdContext context) { CUDDNode result = null; if (context.atomicFormulaTerm() != null) { result = GetCuddNode(context.atomicFormulaTerm()); } else if (context.literalTerm() != null) { result = GetCuddNode(context.literalTerm()); } else if (context.AND() != null) { result = GetCuddNode(context.gd()[0]); for (int i = 1; i < context.gd().Count; i++) { CUDDNode gdNode = GetCuddNode(context.gd()[i]); CUDDNode andNode = CUDD.Function.And(result, gdNode); CUDD.Ref(andNode); CUDD.Deref(result); CUDD.Deref(gdNode); result = andNode; } } else if (context.OR() != null) { result = GetCuddNode(context.gd()[0]); for (int i = 1; i < context.gd().Count; i++) { CUDDNode gdNode = GetCuddNode(context.gd()[i]); CUDDNode orNode = CUDD.Function.Or(result, gdNode); CUDD.Ref(orNode); CUDD.Deref(result); CUDD.Deref(gdNode); result = orNode; } } else if (context.NOT() != null) { CUDDNode gdNode = GetCuddNode(context.gd()[0]); result = CUDD.Function.Not(gdNode); CUDD.Ref(result); CUDD.Deref(gdNode); } else if (context.IMPLY() != null) { CUDDNode gdNode0 = GetCuddNode(context.gd()[0]); CUDDNode gdNode1 = GetCuddNode(context.gd()[1]); result = CUDD.Function.Implies(gdNode0, gdNode1); CUDD.Ref(result); CUDD.Deref(gdNode0); CUDD.Deref(gdNode1); } return(result); }
private void GenerateAbstractPredicates(PlanningParser.GdContext context, IReadOnlyDictionary <string, Predicate> predDict) { if (context.atomicFormulaTerm() != null) { GenerateAbstractPredicates(context.atomicFormulaTerm(), predDict); } else if (context.literalTerm() != null) { GenerateAbstractPredicates(context.literalTerm(), predDict); } else { for (int i = 0; i < context.gd().Count; i++) { GenerateAbstractPredicates(context.gd()[i], predDict); } } }