Exemplo n.º 1
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 Exception, \
                          "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 Exception, "Unknown token type"
        if len(self._operandStack) > 1:
            raise Exception, "Too many operands on the stack"
        result = self._operandStack.pop()
        return result.getValue();   
Exemplo n.º 2
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 Exception, \
                          "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 Exception, "Unknown token type"
        if len(self._operandStack) > 1:
            raise Exception, "Too many operands on the stack"
        result = self._operandStack.pop()
        return result.getValue()