Esempio n. 1
0
 static string Wrap(Expr expr, OperationPriority currentPriority, ExpressionOrder order)
 {
     bool wrap = ShouldWrap(expr, currentPriority, order);
     string s = expr.Print();
     if(wrap)
         return "(" + s + ")";
     return s;
 }
Esempio n. 2
0
 static string WrapFromMultiply(Expr expr, ExpressionOrder order)
 {
     return Wrap(expr, OperationPriority.Multiply, order);
 }
Esempio n. 3
0
 static bool ShouldWrap(Expr expr, OperationPriority priority, ExpressionOrder order)
 {
     Func<OperationPriority, bool> shouldWrap = x => priority >= x;
     return expr.MatchStrict(
         add: x => shouldWrap(OperationPriority.Add),
         mult: x => IsMinusExpression(x) || shouldWrap(OperationPriority.Multiply),
         div: (x, y) => shouldWrap(OperationPriority.Divide),
         power: (x, y) => true, //shouldWrap(OperationPriority.Power),
         sqrt: x => false,
         param: x => false,
         @const: x => {
             if(x.IsFraction())
                 return shouldWrap(OperationPriority.Power);
             if(order == ExpressionOrder.Head)
                 return false;
             return x < 0;
         }
     );
 }