diff options
author | Reinier Heeres <reinier@heeres.eu> | 2008-01-03 08:52:09 (GMT) |
---|---|---|
committer | Reinier Heeres <reinier@heeres.eu> | 2008-01-03 08:52:09 (GMT) |
commit | 5dda927d0d3cbf4c8265db32f5adcdb701cbab35 (patch) | |
tree | ad5624eabd8c8163eeaa7e6152e6ea65250a9446 | |
parent | f0a4be3d698ad001d18f5dfef3763bf1ef741482 (diff) |
More parser fixes, #5734
-rw-r--r-- | eqnparser.py | 12 | ||||
-rw-r--r-- | mathlib.py | 2 | ||||
-rw-r--r-- | toolbars.py | 6 |
3 files changed, 15 insertions, 5 deletions
diff --git a/eqnparser.py b/eqnparser.py index 83b2af4..28167e7 100644 --- a/eqnparser.py +++ b/eqnparser.py @@ -30,6 +30,8 @@ from rational import Rational from gettext import gettext as _ +_generic_error = _('Parse error') + class Equation: def __init__(self, eqn): self.equation = eqn @@ -209,9 +211,9 @@ class EqnParser: self.register_function('operators', lambda x: self.operators_string(), {"nargs": 0}) self.register_operator('+', self.OP_DIADIC, 0, lambda x: self.ml.add(x[0], x[1])) - self.register_operator('+', self.OP_PRE, 1, lambda x: x[0]) + self.register_operator('+', self.OP_PRE, 2, lambda x: x[0]) self.register_operator('-', self.OP_DIADIC, 0, lambda x: self.ml.sub(x[0], x[1])) - self.register_operator('-', self.OP_PRE, 1, lambda x: self.ml.negate(x[0])) + self.register_operator('-', self.OP_PRE, 2, lambda x: self.ml.negate(x[0])) self.register_operator('*', self.OP_DIADIC, 1, lambda x: self.ml.mul(x[0], x[1])) self.register_operator(u'⨯', self.OP_DIADIC, 1, lambda x: self.ml.mul(x[0], x[1])) self.register_operator(u'×', self.OP_DIADIC, 1, lambda x: self.ml.mul(x[0], x[1])) @@ -224,8 +226,14 @@ class EqnParser: self.register_operator('!', self.OP_POST, 0, lambda x: self.ml.factorial(x[0])) self.register_operator('&', self.OP_DIADIC, 0, lambda x: x[0] and x[1]) + self.register_function('and', lambda x: x[0] and x[1], {"nargs": 2}) self.register_operator('|', self.OP_DIADIC, 0, lambda x: x[0] or x[1]) + self.register_function('or', lambda x: x[0] or x[1], {"nargs": 2}) self.register_operator('!', self.OP_PRE, 0, lambda x: not x[0]) + self.register_function('not', lambda x: not x[0], {"nargs": 1}) + +# self.register_operator('^', self.OP_PRE, 0, lambda x: not x[0]) + self.register_function('xor', lambda x: (x[0] and not x[1]) or (x[1] and not x[0]), {"nargs": 2}) self.register_operator('=', self.OP_DIADIC, 0, lambda x: x[0] == x[1]) self.register_operator('!=', self.OP_DIADIC, 0, lambda x: x[0] != x[1]) @@ -42,7 +42,9 @@ class MathLib: #Constants should maybe become variables in eqnparser.py self.set_constant('true', True) + self.set_constant('True', True) self.set_constant('false', False) + self.set_constant('False', False) self.set_constant('pi', self.parse_number('3.1415926535')) self.set_constant('kb', self.parse_number('1.380650524e-23')) self.set_constant('Na', self.parse_number('6.02214e23')) diff --git a/toolbars.py b/toolbars.py index 1d684d9..ea67357 100644 --- a/toolbars.py +++ b/toolbars.py @@ -171,9 +171,9 @@ class BooleanToolbar(gtk.Toolbar): lambda x: calc.button_pressed(calc.TYPE_OP_POST, '|'), lambda x: calc.button_pressed(calc.TYPE_TEXT, 'help(or)')), -1) - self.insert(IconToolButton('xor', _('Logical xor'), - lambda x: calc.button_pressed(calc.TYPE_OP_POST, '^'), - lambda x: calc.button_pressed(calc.TYPE_TEXT, 'help(xor)')), -1) +# self.insert(IconToolButton('xor', _('Logical xor'), +# lambda x: calc.button_pressed(calc.TYPE_OP_POST, '^'), +# lambda x: calc.button_pressed(calc.TYPE_TEXT, 'help(xor)')), -1) self.insert(LineSeparator(), -1) |