elif self.lex.token == '/': self.lex.scan() left = DivideNode(left, self.Term()) else: raise SyntaxError def Term(self): if self.lex.token == 'num': leaf = NumNode(self.lex.match('num')) return leaf elif self.lex.token == 'var': leaf = VarNode(self.lex.value, self.lex.start) self.lex.scan() return leaf elif self.lex.token == '(': self.lex.scan() tree = self.Expr() self.lex.match(')') return tree else: raise SyntaxError #################################################### # self-test code: use my parser, parser1's tester #################################################### if __name__ == '__main__': import testparser testparser.test(Parser, 'parser2') # run with Parser class here
left = left * self.Term() elif self.lex.token == '/': self.lex.scan() left = left / self.Term() else: raise SyntaxError def Term(self): if self.lex.token == 'num': val = self.lex.match('num') # numbers return val elif self.lex.token == 'var': if self.vars.has_key(self.lex.value): val = self.vars[self.lex.value] # lookup name's value self.lex.scan() return val else: raise UndefinedError, self.lex.value elif self.lex.token == '(': self.lex.scan() val = self.Expr() # sub-expression self.lex.match(')') return val else: raise SyntaxError if __name__ == '__main__': import testparser # self-test code testparser.test(Parser, 'parser1') # test local Parser
self.lex.scan() left = left * self.Term() elif self.lex.token == '/': self.lex.scan() left = left / self.Term() else: raise SyntaxError() def Term(self): if self.lex.token == 'num': val = self.lex.match('num') # numbers return val elif self.lex.token == 'var': if self.lex.value in self.vars.keys(): # keys(): EIBTI! val = self.vars[self.lex.value] # look up name's value self.lex.scan() return val else: raise UndefinedError(self.lex.value) elif self.lex.token == '(': self.lex.scan() val = self.Expr() # sub-expression self.lex.match(')') return val else: raise SyntaxError() if __name__ == '__main__': import testparser # self-test code testparser.test(Parser, 'parser1') # test local Parser
self.lex.scan() left = DivideNode(left, self.Term()) else: raise SyntaxError() def Term(self): if self.lex.token == "num": leaf = NumNode(self.lex.match("num")) return leaf elif self.lex.token == "var": leaf = VarNode(self.lex.value, self.lex.start) self.lex.scan() return leaf elif self.lex.token == "(": self.lex.scan() tree = self.Expr() self.lex.match(")") return tree else: raise SyntaxError() ################################################################################# # self-test code: use my parser, parser1's tester ################################################################################# if __name__ == "__main__": import testparser testparser.test(Parser, "parser2") # run with Parser class here