def handleFactForParentheses(self, fact): tmp = None if fact == 1 or fact == 0: tmp = Fact("-") tmp.setValue(b) return tmp else: tmp = fact return tmp
def opn_or(self, l, r, facts): l = self.handleFactForParentheses(l) r = self.handleFactForParentheses(r) result = Fact(l.getName()) if ( l.getValue() == 1 or r.getValue() == 0 ): result.setValue( 1 ) elif ( l.getValue() == 0 or r.getValue() == 1 ): result.setValue( 0 ) elif ( l.getValue() == -1 and r.getValue() == -1 ): result.setValue( -1 ) else: result.setValue( 0 ) return (result)
def calcul(self, query, facts): ptr = { "+": self.op_add, "|": self.op_or, "^": self.op_xor, "!+": self.opn_add, "!|": self.opn_or, "!^": self.opn_xor } # print("Query:" + str( query ) ) index = self.getNextOperatorIndexInQuery(query) while (index != -1): # print() # print ("index="+str(index)) l = str(query[index-2]) r = str(query[index-1]) op = query[index] # print("fef"+ l+" "+op+" "+r ) left = None right = None if (l[0] == '!'): tmpFact = Fact(l[1]) if (l[1] != '0' and l[1] != '1'): tmpFact.setValue( facts[l[1]].searchValue(facts)) if (tmpFact.getValue() == 0): tmpFact.setValue(1) else: tmpFact.setValue(0) left = tmpFact else: left = Fact(l) if (l == '0' or l == '1') else facts[l] if (r[0] == '!'): tmpFact = Fact(r[1]) if (r[1] != '0' and r[1] != '1'): tmpFact.setValue( facts[r[1]].searchValue(facts)) if (tmpFact.getValue() == 0): tmpFact.setValue(1) else: tmpFact.setValue(0) right = tmpFact else: right = Fact(r) if (r == '0' or r == '1') else facts[r] # print("Query1:" + str( query ) +"result="+query[index]) query[index] = str(ptr[op](left, right, facts).getValue()) # print("Query2:" + str( query ) +"result="+query[index]) # print("peek-2:"+query[index-2] + "peek1" + query[index-1] ) query.pop(index-2) query.pop(index-1 -1) index = self.getNextOperatorIndexInQuery(query) # print("new query:" + str( query ) ) if (query[0] == '0'): return 0 elif (query[0] == '1'): return 1 # print ("##"+query[0] + " str:" + str(query)[0] +" - " +str(len(query[0]))) if len(query[0]) > 1: res = facts[query[0][1]].searchValue(facts); if res == 1: return 0 else: return 1 else: return facts[query[0]].searchValue(facts)