aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2012-03-21 18:22:46 +0100
committerIan Hinder <ian.hinder@aei.mpg.de>2012-03-21 18:22:46 +0100
commit016b5dc793e0f1855ccd532e258bf74f8a09d47b (patch)
treea380c8cc9c93e545d09065d1837dd50cda249c69 /Tools
parent15201cd05b255de629bde80938ccf18e23222452 (diff)
KrancScript.m: Simplify and correct algebraic operations
Diffstat (limited to 'Tools')
-rw-r--r--Tools/CodeGen/KrancScript.m10
1 files changed, 6 insertions, 4 deletions
diff --git a/Tools/CodeGen/KrancScript.m b/Tools/CodeGen/KrancScript.m
index 0853966..9be802d 100644
--- a/Tools/CodeGen/KrancScript.m
+++ b/Tools/CodeGen/KrancScript.m
@@ -148,13 +148,15 @@ process["func"["name"[name_],exprs__]] :=
process["expr"[mul_]] := process[mul];
process["expr"[]] := 0;
-process["expr"[a_, "addop"["-"], b_,cs___]] := process[a] - process[b] + process["expr"[cs]];
-process["expr"[a_, "addop"["+"], bs__]] := process[a] + process["expr"[bs]];
+
+(* Addition, subtraction, multiplication and division are all left-associative *)
+process["expr"[cs___, a_, "addop"["+"], b_]] := process["expr"[cs,a]] + process[b];
+process["expr"[cs___, a_, "addop"["-"], b_]] := process["expr"[cs,a]] - process[b];
process["mul"[pow_]] := process[pow];
process["mul"[]] := 1;
-process["mul"[a_, "mulop"["/"], b_,cs___]] := Times[process[a] / process[b],process["mul"[cs]]];
-process["mul"[a_, "mulop"["*"], bs__]] := process[a] * process["mul"[bs]];
+process["mul"[cs___, a_, "mulop"["*"], b_]] := process["mul"[cs,a]] * process[b];
+process["mul"[cs___, a_, "mulop"["/"], b_]] := process["mul"[cs,a]] / process[b];
process["pow"[a_,b_]] := process[a]^process[b];
process["pow"[a_]] := process[a];