def readTypes(self): types = list(self.prologInterface.simpleQuery('base(X).')) for t in types: t = t['X'] predicate = None typ = [] predicateName = '' predicateType = '' addPredicateName = True addPredicateType = False for st in t: if(st == ' ' or st == ''): continue else: if(st == '('): predicate = Predicate() predicate.setName(predicateName) addPredicateType = True addPredicateName = False continue elif(st == ',' or st == ')'): typ.append(predicateType) predicateType = '' addPredicateType = True continue else: pass if(addPredicateName): predicateName += st elif(addPredicateType): predicateType += st else: pass predicate.addTypes(typ) predicate.addArity(len(typ)) self.dictOfPredicates[predicateName] = predicate
def readModes(self): modes = list(self.prologInterface.simpleQuery('mode(Z,X,Y).')) for m in modes: m1 = m m = m['Y'] if m[0] == ',': m = m[2:len(m)-1] elif m[0] == '(': m = m[1:len(m)-1] else: pass predicate = None conditionalPredicates = [] mod = [] predicateName = '' predicateType = '' addPredicateName = True addPredicateType = False insideBracket = False for st in m: if(st == ' ' or st == ''): continue else: if(st == '('): predicate = Predicate() predicate.setName(predicateName) p = self.dictOfPredicates[predicateName] predicate.addTypes(p.getTypes()) addPredicateType = True insideBracket = True addPredicateName = False continue elif(st == ',' and insideBracket): mod.append(predicateType) predicateType = '' addPredicateType = True continue elif(st == ')' and insideBracket): mod.append(predicateType) predicateType = '' addPredicateType = True insideBracket = False continue elif(st == ',' and not insideBracket): predicate.addModes(m1['Z'], 'none', mod, []) predicate.addArity(len(mod)) conditionalPredicates.append(predicate) mod = [] predicateName = '' predicateType = '' addPredicateName = True continue else: pass if(addPredicateName): predicateName += st elif(addPredicateType): predicateType += st else: pass predicate.addModes(m1['Z'], m1['X'], mod, conditionalPredicates) predicate.addArity(len(mod)) if(self.dictOfPredicates.has_key(predicateName)): predicate1 = self.dictOfPredicates[predicateName] predicate1.addModes(m1['Z'], m1['X'], mod, conditionalPredicates) predicate1.appendAggregators(m1['Z'], m1['X']) else: predicate.appendAggregators(m1['Z'], m1['X']) self.dictOfPredicates[predicateName] = predicate