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(); }
public override void Visit(BinExprNode node) { PreVisit(node); node.Left.Visit(this); node.Right.Visit(this); PostVisit(node); }
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 += ")"; }
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)); }
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; }
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 надо специально проверять!!! } // Не обходить потомков }
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)); } } }
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); }
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); } }
public override void VisitBinExprNode(BinExprNode binExpr) { binExpr.Left.Visit(this); binExpr.Right.Visit(this); }
public virtual void VisitBinExprNode(BinExprNode binexpr) { }
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); } }
public override void Visit(BinExprNode node) { OnEnter(node); base.Visit(node); OnExit(node); }
public override void Visit(BinExprNode node) { node.Left.Visit(this); node.Right.Visit(this); }