public abstract void Visit(BinaryExpression expression);
public string CalExpressionTreeResult(NCalc2.Expressions.LogicalExpression lgInput, int intSpaceInput) { if (lgInput == null) { return("\r\n"); } // string strRet = ""; string strTemp = ""; int i, j = 0; //Each time we call this function in another level, add more indication space int intSpace = intSpaceInput + 1; // if ((lgInput == null) || (lgInput.objResult == null)) //This one is Recursion stop condition { strRet = strRet + "null" + "\r\n"; } else if (lgInput is NCalc2.Expressions.ValueExpression) //This one is Recursion stop condition { NCalc2.Expressions.ValueExpression ValueEx = (NCalc2.Expressions.ValueExpression)lgInput; strRet = strRet + lgInput.ToString() + ":" + ValueEx.Value.ToString() + "\r\n"; } else if (lgInput is NCalc2.Expressions.IdentifierExpression) //This one is Recursion stop condition { strRet = strRet + lgInput.ToString() + ": " + lgInput.objResult.ToString() + "\r\n"; } else if (lgInput is NCalc2.Expressions.FunctionExpression) //This case may do recursion { strRet = strRet + lgInput.ToString() + ": " + lgInput.objResult.ToString() + "\r\n"; // NCalc2.Expressions.FunctionExpression FuncExpress = (NCalc2.Expressions.FunctionExpression)lgInput; for (j = 0; j < intSpace; j++) { strTemp = strTemp + "___"; } for (i = 0; i < FuncExpress.Expressions.Length; i++) { strRet = strRet + strTemp + this.CalExpressionTreeResult(FuncExpress.Expressions[i], intSpace);// + "\r\n"; } } else if (lgInput is NCalc2.Expressions.BinaryExpression) //This case may do recursion { NCalc2.Expressions.BinaryExpression BinaryEx = (NCalc2.Expressions.BinaryExpression)lgInput; strRet = strRet + lgInput.ToString() + ": " + lgInput.objResult.ToString() + "\r\n"; for (j = 0; j < intSpace; j++) { strTemp = strTemp + "___"; } strRet = strRet + strTemp + this.CalExpressionTreeResult(BinaryEx.LeftExpression, intSpace); // + "\r\n"; strRet = strRet + strTemp + this.CalExpressionTreeResult(BinaryEx.RightExpression, intSpace); // + "\r\n"; } else if (lgInput is NCalc2.Expressions.TernaryExpression) //This case may do recursion { NCalc2.Expressions.TernaryExpression TernaryEx = (NCalc2.Expressions.TernaryExpression)lgInput; strRet = strRet + lgInput.ToString() + ": " + lgInput.objResult.ToString() + "\r\n"; for (j = 0; j < intSpace; j++) { strTemp = strTemp + "___"; } strRet = strRet + strTemp + this.CalExpressionTreeResult(TernaryEx.LeftExpression, intSpace); // + "\r\n"; strRet = strRet + strTemp + this.CalExpressionTreeResult(TernaryEx.MiddleExpression, intSpace); // + "\r\n"; strRet = strRet + strTemp + this.CalExpressionTreeResult(TernaryEx.RightExpression, intSpace); // + "\r\n"; } else if (lgInput is NCalc2.Expressions.UnaryExpression) //This case may do recursion { NCalc2.Expressions.UnaryExpression UnaryEx = (NCalc2.Expressions.UnaryExpression)lgInput; strRet = strRet + lgInput.ToString() + ": " + lgInput.objResult.ToString() + "\r\n"; for (j = 0; j < intSpace; j++) { strTemp = strTemp + "___"; } strRet = strRet + strTemp + this.CalExpressionTreeResult(UnaryEx.Expression, intSpace);// + "\r\n"; } else //This one is Recursion stop condition { //strRet = strRet + lgInput.ToString() + ": " + lgInput.objResult.ToString() + "\r\n"; } // return(strRet); }
public override void Visit(BinaryExpression expression) { EncapsulateNoValue(expression.LeftExpression); switch (expression.Type) { case BinaryExpressionType.And: Result.Append("and "); break; case BinaryExpressionType.Or: Result.Append("or "); break; case BinaryExpressionType.Div: Result.Append("/ "); break; case BinaryExpressionType.Equal: Result.Append("= "); break; case BinaryExpressionType.Greater: Result.Append("> "); break; case BinaryExpressionType.GreaterOrEqual: Result.Append(">= "); break; case BinaryExpressionType.Lesser: Result.Append("< "); break; case BinaryExpressionType.LesserOrEqual: Result.Append("<= "); break; case BinaryExpressionType.Minus: Result.Append("- "); break; case BinaryExpressionType.Modulo: Result.Append("% "); break; case BinaryExpressionType.NotEqual: Result.Append("!= "); break; case BinaryExpressionType.Plus: Result.Append("+ "); break; case BinaryExpressionType.Times: Result.Append("* "); break; case BinaryExpressionType.BitwiseAnd: Result.Append("& "); break; case BinaryExpressionType.BitwiseOr: Result.Append("| "); break; case BinaryExpressionType.BitwiseXOr: Result.Append("~ "); break; case BinaryExpressionType.LeftShift: Result.Append("<< "); break; case BinaryExpressionType.RightShift: Result.Append(">> "); break; } EncapsulateNoValue(expression.RightExpression); }