def evaluate(self):
        while self._scanner.hasNext():
            currentToken = self._scanner.next()
            self._expressionSoFar += str(currentToken) + " "
            if currentToken.getType() == Token.INT:
                self._operandStack.push(currentToken)
            elif currentToken.isOperator():
                if len(self._operandStack) < 2:
                    raise Exception("Too few operands on the stack")
                t2 = self._operandStack.pop()
                t1 = self._operandStack.pop()
                try:
                    result = Token(
                        self._computeValue(currentToken, t1.getValue(),
                                           t2.getValue()))
                except Exception as error:
                    return error
                else:
                    self._operandStack.push(result)

            else:
                raise Exception("Unknown token type")
        if len(self._operandStack) > 1:
            raise Exception("Too many operands on the stack")
        result = self._operandStack.pop()
        return result.getValue()
Пример #2
0
 def evaluate(self):
     for currentToken in self._postfix:
         self._expressionSoFar += str(currentToken) + " "
         if currentToken.getType() == Token.INT:
             self._operandStack.push(currentToken)
         else: 
             t2 = self._operandStack.pop()
             t1 = self._operandStack.pop()
             result = Token(self._computeValue(currentToken,
                                               t1.getValue(),
                                               t2.getValue()))
             self._operandStack.push(result)
     result = self._operandStack.pop()
     return result.getValue();   
Пример #3
0
 def evaluate(self):
     """Returns the value of the postfix expression."""
     for currentToken in self._scanner:
         if currentToken.getType() == Token.INT:
             self._operandStack.push(currentToken)
         elif currentToken.isOperator(): 
             right = self._operandStack.pop()
             left = self._operandStack.pop()
             result = Token(self._computeValue(currentToken,
                                               left.getValue(),
                                               right.getValue()))
             self._operandStack.push(result)
     result = self._operandStack.pop()
     return result.getValue();   
Пример #4
0
 def evaluate(self):
     """Returns the value of the postfix expression."""
     for currentToken in self._scanner:
         if currentToken.getType() == Token.INT:
             self._operandStack.push(currentToken)
         elif currentToken.isOperator():
             right = self._operandStack.pop()
             left = self._operandStack.pop()
             result = Token(
                 self._computeValue(currentToken, left.getValue(),
                                    right.getValue()))
             self._operandStack.push(result)
     result = self._operandStack.pop()
     return result.getValue()
Пример #5
0
 def evaluate(self):
     while self._scanner.hasNext():
         currentToken = Token(self._scanner.next())
         self._expressionSoFar += str(currentToken) + " "
         if currentToken.getType() == Token.INT:
             self._operandStack.push(currentToken)
         elif currentToken.isOperator():
             if len(self._operandStack) < 2:
                 raise AttributeError(
                     "Too few operands on the stack")
             t2 = self._operandStack.pop()
             t1 = self._operandStack.pop()
             result = Token(self._computeValue(
                     currentToken,int(t1.getValue()),
                     int(t2.getValue())))
             self._operandStack.push(result)
         else:
             print(currentToken.getValue(),currentToken.getType())
             raise AttributeError("Unknown token type")
     if len(self._operandStack) > 1:
         raise AttributeError("Too many operands \
                              on the stack")
     result = self._operandStack.pop()
     return result.getValue()
Пример #6
0
 def evaluate(self):
     """Returns the value of the postfix expression."""
     # For each token in our scanner or list,
     # If it's an operand, push the token
     # If it's an operator pop off two tokens from the stack,
     #  compute the value, and then push the value back on the stack as a new Token
     for currentToken in self._scanner:
         if currentToken.getType() == Token.INT:
             self._operandStack.push(currentToken)
             
         elif currentToken.isOperator(): 
             right = self._operandStack.pop()
             left = self._operandStack.pop()
             result = Token(self._computeValue(currentToken,
                                               left.getValue(),
                                               right.getValue()))
             self._operandStack.push(result)
     
     # The result is the last thing left in the stack
     result = self._operandStack.pop()
     return result.getValue()   
Пример #7
0
    def evaluate(self):
        while self._scanner.hasNext():
            currentToken = self._scanner.next()
            self._expressionSoFar += str(currentToken) + " "
            if currentToken.getType() == Token.INT:
                self._operandStack.push(currentToken)
            elif currentToken.isOperator(): 
                if len(self._operandStack) < 2:
                    raise AttributeError("Too few operands on the stack")
                t2 = self._operandStack.pop()
                t1 = self._operandStack.pop()
                result = Token(self._computeValue(currentToken,
                                                  t1.getValue(),
                                                  t2.getValue()))
                self._operandStack.push(result)

            else:
                raise AttributeError("Unknown token type")
        if len(self._operandStack) > 1:
            raise AttributeError("Too many operands on the stack")
        result = self._operandStack.pop()
        return result.getValue();