\r
class RangeObject(object):\r
def __init__(self, start, end, empty = False):\r
- \r
+\r
if int(start) < int(end):\r
self.start = int(start)\r
self.end = int(end)\r
class RangeContainer(object):\r
def __init__(self):\r
self.rangelist = []\r
- \r
+\r
def push(self, RangeObject):\r
self.rangelist.append(RangeObject)\r
self.rangelist = sorted(self.rangelist, key = lambda rangeobj : rangeobj.start)\r
self.merge()\r
- \r
+\r
def pop(self):\r
for item in self.rangelist:\r
yield item\r
- \r
- def __clean__(self): \r
+\r
+ def __clean__(self):\r
newrangelist = []\r
for rangeobj in self.rangelist:\r
if rangeobj.empty == True:\r
continue\r
else:\r
newrangelist.append(rangeobj)\r
- self.rangelist = newrangelist \r
+ self.rangelist = newrangelist\r
def merge(self):\r
self.__clean__()\r
for i in range(0, len(self.rangelist) - 1):\r
continue\r
else:\r
self.rangelist[i + 1].start = self.rangelist[i].start\r
- self.rangelist[i + 1].end = self.rangelist[i + 1].end > self.rangelist[i].end and self.rangelist[i + 1].end or self.rangelist[i].end \r
+ self.rangelist[i + 1].end = self.rangelist[i + 1].end > self.rangelist[i].end and self.rangelist[i + 1].end or self.rangelist[i].end\r
self.rangelist[i].empty = True\r
\r
self.__clean__()\r
- \r
+\r
def dump(self):\r
print("----------------------")\r
rangelist = ""\r
for object in self.rangelist:\r
rangelist = rangelist + "[%d , %d]" % (object.start, object.end)\r
print(rangelist)\r
- \r
- \r
-class XOROperatorObject(object): \r
- def __init__(self): \r
+\r
+\r
+class XOROperatorObject(object):\r
+ def __init__(self):\r
pass\r
- def Calculate(self, Operand, DataType, SymbolTable): \r
+ def Calculate(self, Operand, DataType, SymbolTable):\r
if isinstance(Operand, type('')) and not Operand.isalnum():\r
Expr = "XOR ..."\r
raise BadExpression(ERR_SNYTAX % Expr)\r
return rangeId\r
\r
class LEOperatorObject(object):\r
- def __init__(self): \r
+ def __init__(self):\r
pass\r
- def Calculate(self, Operand, DataType, SymbolTable): \r
+ def Calculate(self, Operand, DataType, SymbolTable):\r
if isinstance(Operand, type('')) and not Operand.isalnum():\r
Expr = "LE ..."\r
raise BadExpression(ERR_SNYTAX % Expr)\r
SymbolTable[rangeId1] = rangeContainer\r
return rangeId1\r
class LTOperatorObject(object):\r
- def __init__(self): \r
+ def __init__(self):\r
pass\r
def Calculate(self, Operand, DataType, SymbolTable):\r
if isinstance(Operand, type('')) and not Operand.isalnum():\r
- Expr = "LT ..." \r
- raise BadExpression(ERR_SNYTAX % Expr) \r
+ Expr = "LT ..."\r
+ raise BadExpression(ERR_SNYTAX % Expr)\r
rangeId1 = str(uuid.uuid1())\r
rangeContainer = RangeContainer()\r
rangeContainer.push(RangeObject(0, int(Operand) - 1))\r
SymbolTable[rangeId1] = rangeContainer\r
- return rangeId1 \r
+ return rangeId1\r
\r
class GEOperatorObject(object):\r
- def __init__(self): \r
+ def __init__(self):\r
pass\r
- def Calculate(self, Operand, DataType, SymbolTable): \r
+ def Calculate(self, Operand, DataType, SymbolTable):\r
if isinstance(Operand, type('')) and not Operand.isalnum():\r
Expr = "GE ..."\r
raise BadExpression(ERR_SNYTAX % Expr)\r
rangeContainer = RangeContainer()\r
rangeContainer.push(RangeObject(int(Operand), MAX_VAL_TYPE[DataType]))\r
SymbolTable[rangeId1] = rangeContainer\r
- return rangeId1 \r
- \r
+ return rangeId1\r
+\r
class GTOperatorObject(object):\r
- def __init__(self): \r
+ def __init__(self):\r
pass\r
- def Calculate(self, Operand, DataType, SymbolTable): \r
+ def Calculate(self, Operand, DataType, SymbolTable):\r
if isinstance(Operand, type('')) and not Operand.isalnum():\r
Expr = "GT ..."\r
raise BadExpression(ERR_SNYTAX % Expr)\r
rangeContainer = RangeContainer()\r
rangeContainer.push(RangeObject(int(Operand) + 1, MAX_VAL_TYPE[DataType]))\r
SymbolTable[rangeId1] = rangeContainer\r
- return rangeId1 \r
- \r
+ return rangeId1\r
+\r
class EQOperatorObject(object):\r
- def __init__(self): \r
+ def __init__(self):\r
pass\r
- def Calculate(self, Operand, DataType, SymbolTable): \r
+ def Calculate(self, Operand, DataType, SymbolTable):\r
if isinstance(Operand, type('')) and not Operand.isalnum():\r
Expr = "EQ ..."\r
raise BadExpression(ERR_SNYTAX % Expr)\r
rangeContainer = RangeContainer()\r
rangeContainer.push(RangeObject(int(Operand), int(Operand)))\r
SymbolTable[rangeId1] = rangeContainer\r
- return rangeId1 \r
- \r
+ return rangeId1\r
+\r
def GetOperatorObject(Operator):\r
if Operator == '>':\r
return GTOperatorObject()\r
NumberDict[HexNumber] = Number\r
for HexNum in NumberDict:\r
expr = expr.replace(HexNum, NumberDict[HexNum])\r
- \r
- rangedict = {} \r
+\r
+ rangedict = {}\r
for validrange in self.RangePattern.findall(expr):\r
start, end = validrange.split(" - ")\r
start = start.strip()\r
rangeContainer.push(RangeObject(start, end))\r
self.operanddict[str(rangeid)] = rangeContainer\r
rangedict[validrange] = str(rangeid)\r
- \r
+\r
for validrange in rangedict:\r
expr = expr.replace(validrange, rangedict[validrange])\r
- \r
- self._Expr = expr \r
+\r
+ self._Expr = expr\r
return expr\r
- \r
- \r
+\r
+\r
def EvalRange(self, Operator, Oprand):\r
\r
operatorobj = GetOperatorObject(Operator)\r
return operatorobj.Calculate(Oprand, self.PcdDataType, self.operanddict)\r
- \r
+\r
def Rangeintersection(self, Oprand1, Oprand2):\r
rangeContainer1 = self.operanddict[Oprand1]\r
rangeContainer2 = self.operanddict[Oprand2]\r
elif end1 >= end2:\r
rangeid = str(uuid.uuid1())\r
rangeContainer.push(RangeObject(start2, end2))\r
- \r
+\r
self.operanddict[rangeid] = rangeContainer\r
# rangeContainer.dump()\r
return rangeid\r
- \r
+\r
def Rangecollections(self, Oprand1, Oprand2):\r
\r
rangeContainer1 = self.operanddict[Oprand1]\r
rangeContainer2 = self.operanddict[Oprand2]\r
rangeContainer = RangeContainer()\r
- \r
+\r
for rangeobj in rangeContainer2.pop():\r
rangeContainer.push(rangeobj)\r
for rangeobj in rangeContainer1.pop():\r
rangeContainer.push(rangeobj)\r
- \r
+\r
rangeid = str(uuid.uuid1())\r
self.operanddict[rangeid] = rangeContainer\r
- \r
+\r
# rangeContainer.dump()\r
return rangeid\r
- \r
- \r
+\r
+\r
def NegtiveRange(self, Oprand1):\r
rangeContainer1 = self.operanddict[Oprand1]\r
- \r
- \r
+\r
+\r
rangeids = []\r
- \r
+\r
for rangeobj in rangeContainer1.pop():\r
rangeContainer = RangeContainer()\r
rangeid = str(uuid.uuid1())\r
re = self.Rangeintersection(rangeids[0], rangeids[1])\r
for i in range(2, len(rangeids)):\r
re = self.Rangeintersection(re, rangeids[i])\r
- \r
+\r
rangeid2 = str(uuid.uuid1())\r
self.operanddict[rangeid2] = self.operanddict[re]\r
return rangeid2\r
- \r
+\r
def Eval(self, Operator, Oprand1, Oprand2 = None):\r
- \r
+\r
if Operator in ["!", "NOT", "not"]:\r
if not gGuidPattern.match(Oprand1.strip()):\r
raise BadExpression(ERR_STRING_EXPR % Operator)\r
elif Operator == 'and' :\r
if not gGuidPatternEnd.match(Oprand1.strip()) or not gGuidPatternEnd.match(Oprand2.strip()):\r
raise BadExpression(ERR_STRING_EXPR % Operator)\r
- return self.Rangeintersection(Oprand1, Oprand2) \r
+ return self.Rangeintersection(Oprand1, Oprand2)\r
elif Operator == 'or':\r
if not gGuidPatternEnd.match(Oprand1.strip()) or not gGuidPatternEnd.match(Oprand2.strip()):\r
raise BadExpression(ERR_STRING_EXPR % Operator)\r
self._Len = len(self._Expr)\r
self._Token = ''\r
self._WarnExcept = None\r
- \r
+\r
\r
# Literal token without any conversion\r
self._LiteralToken = ''\r
- \r
+\r
# store the operand object\r
self.operanddict = {}\r
# The Pcd max value depends on PcdDataType\r
self._Depth = Depth\r
\r
self._Expr = self._Expr.strip()\r
- \r
+\r
self.preProcessRangeExpr(self._Expr)\r
- \r
+\r
# check if the expression does not need to evaluate\r
if RealValue and Depth == 0:\r
self._Token = self._Expr\r
\r
Val = self._OrExpr()\r
RealVal = Val\r
- \r
+\r
RangeIdList = RealVal.split("or")\r
RangeList = []\r
for rangeid in RangeIdList:\r
RangeList.append(self.operanddict[rangeid.strip()])\r
- \r
+\r
return RangeList\r
\r
# Template function to parse binary operators which have same precedence\r