Exemplo n.º 1
0
	def handleFactForParentheses(self, fact):
		tmp = None
		if fact == 1 or fact == 0:
			tmp = Fact("-")
			tmp.setValue(b)
			return tmp
		else:	
			tmp = fact
		return tmp
Exemplo n.º 2
0
	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)
Exemplo n.º 3
0
	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)