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)
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)
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][|^]"