From 14e4f520ac422e6a76eca8afded52b97fbd2e0c9 Mon Sep 17 00:00:00 2001 From: Daniel Xu Date: Tue, 4 Dec 2018 21:37:47 -0500 Subject: [PATCH] Fixed bug that will cause formulas such as 1*-2^2 failed --- ast.py | 18 +++++++++++++----- expr.py | 4 ++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/ast.py b/ast.py index e680406..72129b1 100644 --- a/ast.py +++ b/ast.py @@ -55,10 +55,18 @@ def add(self, sym): self.cur.left = node(sym, self.cur) self.cur = self.cur.left else: - while self.cur.left is not None or expr.is_unary(self.cur.sym): + temp = self.cur + while self.cur is not None and (self.cur.left is not None or expr.is_unary(self.cur.sym)): self.cur = self.cur.parent - self.cur.left = node(sym, self.cur) - self.cur = self.cur.left + if self.cur is None: + n = node(sym) + n.right = self.root + self.root.parent = n + self.root = n + self.cur = temp + else: + self.cur.left = node(sym, self.cur) + self.cur = self.cur.left else: if self.cur.right is None: self.cur.right = node(sym, self.cur) @@ -303,9 +311,9 @@ def main(): def test(): - a = build("-1^2") + a = build("-1*--2^-2") view(a) - print(evaluate(a.root)) + print(evaluate(a)) if __name__ == "__main__": diff --git a/expr.py b/expr.py index 6070a96..1072f50 100644 --- a/expr.py +++ b/expr.py @@ -39,7 +39,7 @@ "-": lambda x,y : x-y, "*": lambda x,y : x*y, "/": lambda x,y : x/y, - "^": lambda x,y : x**y, + "^": lambda x,y : x**y } symbols.update(opeartors_mapper) @@ -414,4 +414,4 @@ def _match_regex(r, e): for m in reg.finditer(e): starts.append(m.start()) ends.append(m.end()) - return starts, ends \ No newline at end of file + return starts, ends