import string,math delin_debug = 0 exec_debug = 0 def sc(command): return execute(parse(tokenize(string.strip(command), symbols))) class scalar: pass class vector: def __str__(self): return '(' + ','.join(map(str, self.data)) + ')' def make(self, l): self.length = len(l) self.data = [] [self.data.append(component) for component in l] def set(self, i,s): self.data[i-1]=s def get(self, i): self.data[i-1] class matrix: pass symbols = ['(',')','[',']','<','>','degrees','sin','cos','tan','log','ln','factor','^','*','/','+','-',',','=','_'] # bugs: some whitespace gets through def tokenize(s, symbols): parts = [s] for symbol in symbols: newparts = [] for part in parts: for newpart in string.split(part, symbol): newparts.append(newpart) newparts.append(symbol) newparts = newparts[:-1] newparts = [newpart for newpart in newparts if newpart != ''] parts = newparts return parts def parse(tokens): return numericize(tokens) def numericize_anon(part): if part in symbols: return part if '.' in part: return float(part) return int(part) def numericize(parts): return map(numericize_anon, parts) delin_tokens = {'(': ')', '[': ']', '<': '>'} def delinearizer(tokens, start, matching): if delin_debug: print 'delinearizer(%r, %r)'%(tokens, start) i=start while i