# Dumb parser for '+' and '-' OP = '+-' stack = [] tree = [] state = 1 def parse(): global s, state, stack, tree x, s = s[0], s[1:] if x in OP: operator = 1 else: operator = 0 if state == 1: if not operator: stack.append(x) state = 2 return else: raise Exception, 'Parse Error' elif state == 2: if operator: stack.append(x) state = 3 return else: raise Exception, 'Parse Error' elif state == 3: if not operator: op = stack.pop() var = stack.pop() tree = [var, op, x] state = 4 return else: raise Exception, 'Parse Error' elif state == 4: if x == '$': return if operator: stack.append(tree) stack.append(x) state = 3 return else: raise Exception, 'Parse Error' if __name__ == '__main__': global s s = 'a+b+c+d+e$' while len(s) > 1: parse() print tree