def litorvar(self): global tokens if not (self.tok in tokens): self.expressionStack.push(tree(self.tok, self.lang, None)) self.tok = self.getNext() return True else: return False
def litorvar (self): global tokens if not (self.tok in tokens): self.expressionStack.push(tree(self.tok, self.lang, None)) self.tok = self.getNext() return True else: return False
def simpleExprFinal(self): while self.addOperator(): if self.term(): r = self.expressionStack.pop() operator = self.expressionStack.pop() l = self.expressionStack.pop() t = tree(operator, self.lang, self.internalError) t.operands([l, r]) self.expressionStack.push(t)
def simpleExprFinal (self): while self.addOperator(): if self.term(): r = self.expressionStack.pop() operator = self.expressionStack.pop() l = self.expressionStack.pop() t = tree(operator, self.lang, self.internalError) t.operands([l, r]) self.expressionStack.push(t)
def unarySimpleExpr(self, op): if self.term(): if op == '-': l = self.expressionStack.pop() t = tree('-', self.lang, self.internalError) t.operands([l]) self.expressionStack.push(t) self.simpleExprFinal() return True else: return False
def unarySimpleExpr (self, op): if self.term(): if op == '-': l = self.expressionStack.pop() t = tree('-', self.lang, self.internalError) t.operands([l]) self.expressionStack.push(t) self.simpleExprFinal() return True else: return False
def expression(self): if self.unaryOrTerm(): while self.addOperator(): op = self.expressionStack.pop() l = self.expressionStack.pop() self.term() r = self.expressionStack.pop() t = tree(op, self.lang, self.internalError) t.operands([l, r]) t.out() self.expressionStack.push(t) return True return False
def expression (self): if self.unaryOrTerm(): while self.addOperator(): op = self.expressionStack.pop() l = self.expressionStack.pop() self.term() r = self.expressionStack.pop() t = tree(op, self.lang, self.internalError) t.operands([l, r]) t.out() self.expressionStack.push(t) return True return False
def term(self): if self.factor(): while True: operator = "*" if self.mulOperator(): operator = self.expressionStack.pop() if self.factor(): r = self.expressionStack.pop() l = self.expressionStack.pop() t = tree(operator, self.lang, None) t.operands([l, r]) self.expressionStack.push(t) else: return True else: return False
def term (self): if self.factor(): while True: operator = "*" if self.mulOperator(): operator = self.expressionStack.pop() if self.factor(): r = self.expressionStack.pop() l = self.expressionStack.pop() t = tree(operator, self.lang, None) t.operands([l, r]) self.expressionStack.push(t) else: return True else: return False
def factor(self): if self.seenToken('('): print "factor -> ( expression )" self.expression() self.expect(')') print "factor True" return True elif self.litorvar(): if self.seenToken('^'): print "factor ^ " l = self.expressionStack.pop() self.factor() r = self.expressionStack.pop() t = tree('^', self.lang, None) t.operands([l, r]) self.expressionStack.push(t) else: print "not seen ^" print "factor True" return True else: print "factor False" return False
def factor (self): if self.seenToken('('): # print "factor -> ( expression )" self.expression() self.expect(')') # print "factor True" return True elif self.litorvar(): if self.seenToken('^'): # print "factor ^ " l = self.expressionStack.pop() self.factor() r = self.expressionStack.pop() t = tree('^', self.lang, None) t.operands([l, r]) self.expressionStack.push(t) else: # print "not seen ^" pass # print "factor True" return True else: # print "factor False" return False