/// <inheritdoc />
        public void Visit(MorestachioOperatorExpression expression)
        {
            StringBuilder
            .Append("op(" + expression.Operator.OperatorText + ")")
            .AppendLine("{")
            .Up()
            .AppendInterlacedLine("Left")
            .AppendInterlacedLine("{")
            .Up()
            .AppendInterlaced();

            this.Visit(expression.LeftExpression);
            StringBuilder
            .Down()
            .AppendLine()
            .AppendInterlaced("}");

            if (expression.RightExpression != null)
            {
                StringBuilder.AppendLine(",")
                .AppendInterlacedLine("Right")
                .AppendInterlacedLine("{")
                .Up()
                .AppendInterlaced();
                this.Visit(expression.RightExpression);
                StringBuilder.Down().AppendLine().AppendInterlaced("}");
            }
            StringBuilder.Down().AppendLine().AppendInterlaced("}");
        }
예제 #2
0
 /// <inheritdoc />
 public void Visit(MorestachioOperatorExpression expression)
 {
     if (expression.Operator.IsBinaryOperator)
     {
         this.Visit(expression.LeftExpression);
         StringBuilder.Append(" ");
         StringBuilder.Append(expression.Operator.OperatorText);
         if (expression.RightExpression != null)
         {
             StringBuilder.Append(" ");
             this.Visit(expression.RightExpression);
         }
     }
     else
     {
         if (expression.Operator.Placement == OperatorPlacement.Left)
         {
             StringBuilder.Append(expression.Operator.OperatorText);
             this.Visit(expression.LeftExpression);
         }
         else
         {
             this.Visit(expression.LeftExpression);
             StringBuilder.Append(" ");
             StringBuilder.Append(expression.Operator.OperatorText);
         }
     }
 }
예제 #3
0
        /// <inheritdoc />
        public void Visit(MorestachioOperatorExpression expression)
        {
            //if (!(expression.LeftExpression is MorestachioOperatorExpression)
            //&& !(expression.LeftExpression is MorestachioExpressionListBase expList
            //    && expList.Expressions.Count == 1
            //    && (expList.Expressions.FirstOrDefault() is MorestachioOperatorExpression)))
            //{
            //	this.Visit(expression.LeftExpression);
            //}

            this.Visit(expression.LeftExpression);
            StringBuilder.Append(" ");
            StringBuilder.Append(expression.Operator.OperatorText);
            if (expression.RightExpression != null)
            {
                StringBuilder.Append(" ");
                this.Visit(expression.RightExpression);
            }
        }
예제 #4
0
        internal static IMorestachioExpression ParseExpressionFromKind(this XmlReader reader)
        {
            IMorestachioExpression exp = null;

            switch (reader.Name)
            {
            case "Expression":
                exp = new MorestachioExpression();
                break;

            case "ExpressionMultiPart":
                exp = new MorestachioMultiPartExpressionList();
                break;

            case "ExpressionArgList":
                exp = new MorestachioArgumentExpressionList();
                break;

            case "ExpressionString":
                exp = new MorestachioExpressionString();
                break;

            case "ExpressionNumber":
                exp = new MorestachioExpressionNumber();
                break;

            case "ExpressionOperator":
                exp = new MorestachioOperatorExpression();
                break;

            case "ExpressionBracket":
                exp = new MorestachioBracketExpression();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(ExpressionKindNodeName));
            }
            exp.ReadXml(reader);
            return(exp);
        }