Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReinier Heeres <reinier@heeres.eu>2008-01-03 08:52:09 (GMT)
committer Reinier Heeres <reinier@heeres.eu>2008-01-03 08:52:09 (GMT)
commit5dda927d0d3cbf4c8265db32f5adcdb701cbab35 (patch)
treead5624eabd8c8163eeaa7e6152e6ea65250a9446
parentf0a4be3d698ad001d18f5dfef3763bf1ef741482 (diff)
More parser fixes, #5734
-rw-r--r--eqnparser.py12
-rw-r--r--mathlib.py2
-rw-r--r--toolbars.py6
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])
diff --git a/mathlib.py b/mathlib.py
index 4c3fe3b..b70d096 100644
--- a/mathlib.py
+++ b/mathlib.py
@@ -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)