diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-04-27 14:02:58 +0200 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-04-27 14:09:35 +0200 |
commit | 7b4693c054be1f6e6b68e7d4c97cdbbb8fbb1e9a (patch) | |
tree | 0e0ee5f4241a42bc43c985eaa8e3a1c01deb07e2 /Tools | |
parent | 08217508e4168660a0484f64507041e2502a50dd (diff) |
ScriptOutput.m: Improve parenthesisation
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/CodeGen/ScriptOutput.m | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/Tools/CodeGen/ScriptOutput.m b/Tools/CodeGen/ScriptOutput.m index fc8a402..0233505 100644 --- a/Tools/CodeGen/ScriptOutput.m +++ b/Tools/CodeGen/ScriptOutput.m @@ -158,21 +158,54 @@ writeExpression[s_Symbol] := ToString[s]; writeExpression[IfThen[a_,b_,c_]] := - {"(",paren@writeExpression[a], " ? ", paren@writeExpression[b], " : ", paren@writeExpression[c],")"}; + {"(",paren2[IfThen,a]@writeExpression[a], " ? ", paren2[IfThen,b]@writeExpression[b], " : ", paren2[IfThen,c]@writeExpression[c],")"}; writeExpression[KroneckerDelta[i1_TensorIndex,i2_TensorIndex]] := {"delta", writeExpression[{i1,i2}]}; paren[x_] := {"(",x,")"}; +(* paren2[_,_?NumberQ][x_] := *) +(* x; *) + +(* paren2[_,_Symbol][x_] := *) +(* x; *) + +(* paren2[_,_Tensor][x_] := *) +(* x; *) + +(* paren2[Times,_Power][x_] := *) +(* x; *) + +precedenceTable = {Rational, Tensor, Derivative, Power, Times, Plus, Equal, IfThen}; + +(* paren2[Plus,_Power][x_] := *) +(* x; *) + +paren2[where_,what_][x_] := + x; + +paren2[where_,what_[___]][x_] := + If[!And@@Map[MemberQ[precedenceTable,#]&,{where,what}], + paren[x], + (* Print[where," ", what, " ", Position[precedenceTable,where], " ", Position[precedenceTable,where]]; *) + If[Position[precedenceTable,where][[1,1]] < Position[precedenceTable,what][[1,1]], + paren[x], + x]]; + + (* Print["where = ", where, ", what = ", what, ", positions = ", positions]; *) + +(* paren2[_,_][x_] := *) +(* paren[x]; *) + writeExpression[a_Plus] := - Riffle[Map[paren[writeExpression[#]] &,List@@a]," + "]; + Riffle[Map[paren2[Plus,#][writeExpression[#]] &,List@@a]," + "]; writeExpression[a_Times] := - Riffle[Map[paren[writeExpression[#]] &,List@@a]," * "]; + Riffle[Map[paren2[Times,#][writeExpression[#]] &,List@@a]," * "]; writeExpression[Power[a_,b_]] := - {paren@writeExpression[a],"**",paren@writeExpression[b]}; + {paren2[Power,a]@writeExpression[a],"**",paren2[Power,b]@writeExpression[b]}; writeExpression[Unequal[a_,b_]] := {paren@writeExpression[a],"!=",paren@writeExpression[b]}; |