Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/eqnparser.py
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 /eqnparser.py
parentf0a4be3d698ad001d18f5dfef3763bf1ef741482 (diff)
More parser fixes, #5734
Diffstat (limited to 'eqnparser.py')
-rw-r--r--eqnparser.py12
1 files changed, 10 insertions, 2 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])