#--------------------Produce a parse tree---------------------# # gettoken() and lookahead() are same as in the first listing NULL = 0 import re, string Inputbuf = [] class Tree: pass def factor(): newnode = Tree() newnode.number = gettoken() newnode.left = newnode.right = 0 return newnode def term(): left = factor() tmp = lookahead() while (tmp in ['*', '/']): gettoken() right = factor() newnode = Tree() newnode.op = tmp newnode.left = left newnode.right = right left = newnode tmp = lookahead() return left def expression(): left = term() tmp = lookahead() while (tmp in ['+', '-']): gettoken() right = term() newnode = Tree() newnode.op = tmp newnode.left = left newnode.right = right left = newnode tmp = lookahead() return left def treeprint(ptree): if (ptree): try: print ptree.op except: print ptree.number treeprint(ptree.left) treeprint(ptree.right) def main(): global Inputbuf Inputbuf = raw_input() ptree = expression() return ptree if __name__=='__main__': ptree = main() treeprint(ptree)