def pushOperator(self, op): if regOp.isClosingBracket(op.name): while len(self._operatorStack) > 0: tempOp = self._operatorStack.pop() if isinstance(tempOp, regOp.BracketOperator) and tempOp.char == op.match: return else: self._outputQueue.append(tempOp) raise Exception(RegexParser._unbalanced_parenth_except) elif regOp.isOpeningBracket(op.name): self._operatorStack.append(op) else: while len(self._operatorStack) > 0: tempOp = self._operatorStack[len(self._operatorStack)-1] if ( op.precedence < tempOp.precedence or (isinstance(op, regOp.AssociativeOperator) and op.associativity == regOp.EAssociativity.LEFT and op.precedence == tempOp.precedence) ): self._outputQueue.append(self._operatorStack.pop()) else: break if regOp.isLeftAssociativeUnaryOperator(op): self._outputQueue.append(op) else: self._operatorStack.append(op)
def testIsClosingBracket(self): self.assertTrue (o.isClosingBracket(')')) self.assertFalse(o.isClosingBracket('(')) self.assertFalse(o.isClosingBracket('+')) self.assertFalse(o.isClosingBracket('a')) self.assertFalse(o.isClosingBracket('(sq')) self.assertFalse(o.isClosingBracket('\(s'))
def padWithSequenceOperators(self,string): paddedString = [] pastChar = '' for idx,char in enumerate(string): if idx != 0: if regOp.isOperator(char): if regOp.isOpeningBracket(char) and not regOp.isOpeningBracket(pastChar): paddedString.append(regOp.getSquenceOperator()) else: #is character if regOp.isOperator(pastChar): if regOp.isClosingBracket(pastChar) or regOp.isLeftAssociativeUnaryOperator(regOp.getOperator(pastChar)): paddedString.append(regOp.getSquenceOperator()) else: #pastChar is character paddedString.append(regOp.getSquenceOperator()) paddedString.append(char) pastChar = char return paddedString