コード例 #1
0
ファイル: ExprOpener.cs プロジェクト: 0x1000000/Expressions
 public Expr VisitExprPlus(ExprPlus expr)
 {
     //x+(y+z) = x+y+z
     if (expr.Right is ExprSubExpr subExprPlus && subExprPlus.SubExpression is ExprPlus plus)
     {
         return(new ExprPlus(expr.Left, plus));
     }
     //(x+y)+z = x+y+z
     if (expr.Left is ExprSubExpr subExprL && subExprL.SubExpression is ExprPlus plusL)
     {
         return(new ExprPlus(plusL, expr.Right));
     }
     //x+(y-z) = x+y-z
     if (expr.Right is ExprSubExpr subExprMinus && subExprMinus.SubExpression is ExprMinus minus)
     {
         return(new ExprPlus(expr.Left, minus));
     }
     //(y-z)+x = y-z+x
     if (expr.Left is ExprSubExpr subExprMinusL && subExprMinusL.SubExpression is ExprMinus minusL)
     {
         return(new ExprPlus(minusL, expr.Right));
     }
     //x+(y*z) = x+y*z
     if (expr.Right is ExprSubExpr subExprMul && subExprMul.SubExpression is ExprMul mul)
     {
         return(new ExprPlus(expr.Left, mul));
     }
     //(x*y)+z = x*y+z
     if (expr.Left is ExprSubExpr subExprMulL && subExprMulL.SubExpression is ExprMul mulL)
     {
         return(new ExprPlus(mulL, expr.Right));
     }
     return(expr);
 }
コード例 #2
0
        public Expr VisitExprPlus(ExprPlus expr)
        {
            var newLeft  = expr.Left.Accept(this).Accept(this._modifier);
            var newRight = expr.Right.Accept(this).Accept(this._modifier);

            if (!ReferenceEquals(newLeft, expr.Left) || !ReferenceEquals(newRight, expr.Right))
            {
                return(new ExprPlus(newLeft, newRight));
            }
            return(expr);
        }
コード例 #3
0
ファイル: ExprPrinter.cs プロジェクト: 0x1000000/Expressions
 public string VisitExprPlus(ExprPlus expr)
 => $"{expr.Left.Accept(this)}+{expr.Right.Accept(this)}";
コード例 #4
0
 public int VisitExprPlus(ExprPlus expr)
 => expr.Left.Accept(this) + expr.Right.Accept(this);