Exemplo n.º 1
0
        public override void Visit(BinExprNode BinOp)
        {
            switch (BinOp.OpType)
            {
            case BinOpType.Prod:
                if (BinOp.Left is IntNumNode && (BinOp.Left as IntNumNode).Num == 1)
                {
                    BinOp.Right.Visit(this);
                    ReplaceExpr(BinOp, BinOp.Right);
                }
                else if (BinOp.Right is IntNumNode && (BinOp.Right as IntNumNode).Num == 1)
                {
                    BinOp.Left.Visit(this);
                    ReplaceExpr(BinOp, BinOp.Left);
                }
                else
                {
                    base.Visit(BinOp);
                }
                break;

            case BinOpType.Div:
                if (BinOp.Right is IntNumNode && (BinOp.Right as IntNumNode).Num == 1)
                {
                    BinOp.Left.Visit(this);
                    ReplaceExpr(BinOp, BinOp.Left);
                }
                break;

            default:
                base.Visit(BinOp);
                break;
            }
        }
 public override void VisitBinExprNode(BinExprNode binop)
 {
     binop.Parent = st.Peek();
     st.Push(binop);
     base.VisitBinExprNode(binop);
     st.Pop();
 }
Exemplo n.º 3
0
 public override void Visit(BinExprNode node)
 {
     PreVisit(node);
     node.Left.Visit(this);
     node.Right.Visit(this);
     PostVisit(node);
 }
Exemplo n.º 4
0
 public override void Visit(BinExprNode node)
 {
     node.Left.Visit(this);
     AddSpace();
     ProgramBuilder.Append(BinOpTypeExtensions.ToFriendlyString(node.OpType));
     AddSpace();
     node.Right.Visit(this);
 }
 public override void VisitBinExprNode(BinExprNode binexpr)
 {
     Text += "(";
     binexpr.Left.Visit(this);
     Text += " " + binexpr.OpType + " ";
     binexpr.Right.Visit(this);
     Text += ")";
 }
Exemplo n.º 6
0
        public override void VisitBinExprNode(BinExprNode binexpr)
        {
            int count = GetOpCountBinExprNode(binexpr);

            if (count > MaxCount)
            {
                MaxCount = count;
            }
        }
 public override void Visit(BinExprNode node)
 {
     if (node.Left is IdNode leftIdNode && node.Right is IdNode rightIdNode &&
         leftIdNode.Name.Equals(rightIdNode.Name) &&
         (node.OpType == BinOpType.Equal ||
          node.OpType == BinOpType.LessOrEqual ||
          node.OpType == BinOpType.GreaterOrEqual))
     {
         ReplaceExpr(node, new BoolValNode(true));
     }
Exemplo n.º 8
0
 public override void Visit(BinExprNode node)
 {
     if (node.Left is IdNode leftIdNode && node.Right is IdNode rightIdNode &&
         leftIdNode.Name.Equals(rightIdNode.Name) &&
         (node.OpType == BinOpType.Greater ||
          node.OpType == BinOpType.Less ||
          node.OpType == BinOpType.NotEqual))
     {
         ReplaceExpr(node, new BoolValNode(false));
         IsChanged = true;
     }
Exemplo n.º 9
0
        public override void Visit(BinExprNode BinOp)
        {
            if (BinOp.OpType == BinOpType.Greater && BinOp.Left is IdNode idl && BinOp.Right is IdNode idr &&
                idl.Name == idl.Name)
            {
                //ReplaceStat(ass, null); // Заменить на null.

                // Потом этот null надо специально проверять!!!
            }
            // Не обходить потомков
        }
Exemplo n.º 10
0
 public override void VisitBinExprNode(BinExprNode binExpr)
 {
     base.VisitBinExprNode(binExpr);
     if (binExpr.Left is IntNumNode left && binExpr.Right is IntNumNode right)
     {
         if (binExpr.OpType == BinOpType.Equal)
         {
             ReplaceExpr(binExpr, new BoolValNode(left.Num == right.Num));
         }
         if (binExpr.OpType == BinOpType.NotEqual)
         {
             ReplaceExpr(binExpr, new BoolValNode(left.Num != right.Num));
         }
     }
 }
Exemplo n.º 11
0
        private int GetOpCountBinExprNode(BinExprNode binexpr)
        {
            int res = 1;

            if (binexpr.Left is BinExprNode)
            {
                res += GetOpCountBinExprNode(binexpr.Left as BinExprNode);
            }

            if (binexpr.Right is BinExprNode)
            {
                res += GetOpCountBinExprNode(binexpr.Right as BinExprNode);
            }

            return(res);
        }
Exemplo n.º 12
0
 public override void Visit(BinExprNode BinOp)
 {
     if (BinOp.Left is IntNumNode && (BinOp.Left as IntNumNode).Num == 0)
     {
         BinOp.Right.Visit(this);
         ReplaceExpr(BinOp, BinOp.Right);
     }
     else if (BinOp.Right is IntNumNode && (BinOp.Right as IntNumNode).Num == 0)
     {
         BinOp.Left.Visit(this);
         ReplaceExpr(BinOp, BinOp.Left);
     }
     else
     {
         base.Visit(BinOp);
     }
 }
Exemplo n.º 13
0
 public override void VisitBinExprNode(BinExprNode binExpr)
 {
     binExpr.Left.Visit(this);
     binExpr.Right.Visit(this);
 }
Exemplo n.º 14
0
 public virtual void VisitBinExprNode(BinExprNode binexpr)
 {
 }
Exemplo n.º 15
0
 public virtual void Visit(BinExprNode node)
 {
 }
        public override void Visit(BinExprNode binExpr)
        {
            double?number1 = null, number2 = null;
            bool   isChanged = false;

            if (binExpr.Left is IntNumNode || binExpr.Left is FloatNumNode)
            {
                if (binExpr.Left is IntNumNode i)
                {
                    number1 = i.Num;
                }
                if (binExpr.Left is FloatNumNode f)
                {
                    number1 = f.Num;
                }
            }
            if (binExpr.Right is IntNumNode || binExpr.Right is FloatNumNode)
            {
                if (binExpr.Right is IntNumNode i)
                {
                    number2 = i.Num;
                }
                if (binExpr.Right is FloatNumNode f)
                {
                    number2 = f.Num;
                }
            }
            if (number1 != null && number2 != null)
            {
                BoolValNode newExpr = null;
                if (binExpr.OpType == BinOpType.Equal)
                {
                    newExpr = new BoolValNode(number1 == number2);
                    ReplaceExpr(binExpr, newExpr);
                }

                if (binExpr.OpType == BinOpType.NotEqual)
                {
                    newExpr = new BoolValNode(number1 != number2);
                    ReplaceExpr(binExpr, newExpr);
                }

                if (binExpr.OpType == BinOpType.Less)
                {
                    newExpr = new BoolValNode(number1 < number2);
                    ReplaceExpr(binExpr, newExpr);
                }

                if (binExpr.OpType == BinOpType.Greater)
                {
                    newExpr = new BoolValNode(number1 > number2);
                    ReplaceExpr(binExpr, newExpr);
                }

                if (binExpr.OpType == BinOpType.LessOrEqual)
                {
                    newExpr = new BoolValNode(number1 <= number2);
                    ReplaceExpr(binExpr, newExpr);
                }

                if (binExpr.OpType == BinOpType.GreaterOrEqual)
                {
                    newExpr = new BoolValNode(number1 >= number2);
                    ReplaceExpr(binExpr, newExpr);
                }

                if (newExpr != null)
                {
                    isChanged = true;
                    base.Visit(newExpr);
                }
            }
            if (!isChanged)
            {
                base.Visit(binExpr);
            }
        }
Exemplo n.º 17
0
 public override void Visit(BinExprNode node)
 {
     OnEnter(node);
     base.Visit(node);
     OnExit(node);
 }
Exemplo n.º 18
0
 public override void Visit(BinExprNode node)
 {
     node.Left.Visit(this);
     node.Right.Visit(this);
 }