def calculateAndReturnAnsToken(operandStack, operatorStack): num2Token = st.popStack(operandStack) # Pop the second operand for calculation (FILO) num1Token = st.popStack(operandStack) # Pop the first operand for calculation (FILO) operator = st.popStack(operatorStack) # Pop the operator for calculation ans = ar.calculationBasedOnOperator(num1Token.num, num2Token.num, operator.symbol) # Get the calculated ans token = operandT.createOperandToken(sI.formatNumber(ans)) # Create the operand token based on calculated ans return token
def test_createOperandToken_given_abcd_expect_exception_raised(self): try: # createOperandToken(operandStr) operandToken = operandT.createOperandToken("abcd") self.assertEqual("abcd", operandToken.num) self.assertEqual(None, operandToken.numType) self.assertEqual("OPERAND_TOKEN", operandToken.tokenType) except Exception as e: print(e)
def createAndPushTokenToStack(listIndex, expressionList, operandStack, operatorStack, previousToken): currentChar = expressionList[listIndex] if sI.isNumber(currentChar): # formatNumber(number) token = operandT.createOperandToken(sI.formatNumber(sI.stringToNumber(currentChar))) st.pushStack(operandStack, token) elif sI.isOperator(currentChar): # Raise exception when non operator detected token = operatorT.createOperatorToken(operatorT.getOperatorStrAffix(getCharFromToken(previousToken), expressionList[listIndex + 1], currentChar)) st.pushStack(operatorStack, token) return token
def createToken(listIndex, expressionList, previousToken): currentChar = expressionList[listIndex] if sI.isNumber(currentChar): # formatNumber(number) token = operandT.createOperandToken(sI.formatNumber(sI.stringToNumber(currentChar))) elif sI.isOperator(currentChar): # Raise exception when non operator detected, required next char to check get # affix token = operatorT.createOperatorToken(operatorT.getOperatorStrAffix(getCharFromToken(previousToken), expressionList[listIndex + 1], currentChar)) token.tokenId = listIndex return token
def test_createOperandToken_given_1012_expect_token_with_correct_info(self): # createOperandToken(operandStr) operandToken = operandT.createOperandToken("1012") self.assertEqual(1012, operandToken.num) self.assertEqual("int", operandToken.numType) self.assertEqual("OPERAND_TOKEN", operandToken.tokenType)
def test_a_getCharFromToken_given_operand_token_expect_return_value_of_token_in_str( self): # createOperandToken(operandStr) operandToken = operandT.createOperandToken("123") # getCharFromToken(token): self.assertEqual("123", sY.getCharFromToken(operandToken))