factor = Forward() factor << (atom | expr) term = (factor | expr) + ZeroOrMore(multop + expr) addterm = (term | expr) + ZeroOrMore(addop + expr) expr << ((lpar + expr + rpar) | addterm) bnf = expr pattern = bnf + StringEnd() # map operator symbols to corresponding arithmetic operations opn = { "+": (lambda a, b: numpy.add(a, b)), "-": (lambda a, b: numpy.subtract(a, b)), "*": (lambda a, b: numpy.multiply(a, b)), "/": (lambda a, b: MathOperations.divisionLim(a, b)), "^": (lambda a, b: numpy.power(a, b)), "<": (lambda a, b: numpy.less(a, b)), ">": (lambda a, b: numpy.greater(a, b)), "=": (lambda a, b: numpy.equal(a, b)), "!=": (lambda a, b: numpy.not_equal(a, b)), "<=": (lambda a, b: numpy.less_equal(a, b)), ">=": (lambda a, b: numpy.greater_equal(a, b)), } func = { "sin": numpy.sin, "asin": numpy.arcsin, "cos": numpy.cos, "abs": numpy.abs, "acos": numpy.arccos,
factor = Forward() factor << (atom | expr) term = (factor | expr) + ZeroOrMore( multop + expr ) addterm = (term | expr) + ZeroOrMore( addop + expr ) expr << ((lpar + expr + rpar) | addterm) bnf = expr pattern = bnf + StringEnd() # map operator symbols to corresponding arithmetic operations opn = { "+" : ( lambda a,b: numpy.add( a, b ) ), "-" : ( lambda a,b: numpy.subtract( a, b ) ), "*" : ( lambda a,b: numpy.multiply( a, b ) ), "/" : ( lambda a,b: MathOperations.divisionLim( a, b ) ), "^" : ( lambda a,b: numpy.power( a, b) ), "<" : ( lambda a,b: numpy.less( a, b) ), ">" : ( lambda a,b: numpy.greater( a, b) ), "=" : ( lambda a,b: numpy.equal( a, b) ), "!=" : ( lambda a,b: numpy.not_equal( a, b) ), "<=" : ( lambda a,b: numpy.less_equal( a, b) ), ">=" : ( lambda a,b: numpy.greater_equal( a, b) ) } func = { "sin": numpy.sin, "asin": numpy.arcsin, "cos": numpy.cos, "abs": numpy.abs, "acos": numpy.arccos, "tan": numpy.tan,