Esempio n. 1
0
	def calcul(self, query, varMap):
		l = Var(str(self.child))
		# print (str(self.child))
		l.setValue(1)
		opposite = 0
		ptr = {
				"+": self.op_add,
				"|": self.op_or,
				"^": self.op_xor,
				"!+": self.opn_add,
				"!|": self.opn_or,
				"!^": self.opn_xor
			}
		op = "+"

		for x in query:
			if ( op == None and self.isOperator(x) == True ):
				op = x
			elif ( self.isOperator(x) == False ):
				if ( x != "!" ):
					if ( opposite == 1 ):
						op = "!" + op
					val = ptr[op](l, varMap[x], varMap).getValue()
					l.setValue(val)
					opposite = 0
					op = None
				else :
					opposite = 1

		return (l)
Esempio n. 2
0
	def opn_or(self, l, r, varMap):
		result = Var(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)
Esempio n. 3
0
import re
from query import Query

from var import Var

A = Var('A')
B = Var('B')
C = Var('C')

A.setValue(1)
B.setValue(0)
C.setValue(0)

varMap = {
			"A" : A,
			"B" : B,
			"C" : C
		}

query = "(A+B)|(B+C)"
test = Query(query)
print(query)
tmp = query
for (name, value) in varMap.items():
	tmp = str.replace(tmp, name, str(value.getValue()))
print(tmp)
result = test.run(varMap)
print("result brut = " + str(result))

def interpretResult( right, search, result ):
	undetermined = "!?[A-Z][|^]"