Exemple #1
0
 private bool TestRight(Operator top, INode rhs)
 {
     if ((this.mode & 1) == 0)
     {
         if (!(rhs is ASTOpNode))
         {
             return(false);
         }
         Operator @operator = ((ASTOpNode)rhs).GetOperator();
         if (top == @operator)
         {
             return(!top.IsRightBinding() && !top.IsAssociative());
         }
         if (top.GetPrecedence() == @operator.GetPrecedence())
         {
             if (top.IsLeftBinding() && top.IsAssociative())
             {
                 return(false);
             }
             return(true);
         }
         if (top.GetPrecedence() > @operator.GetPrecedence())
         {
             return(false);
         }
     }
     return(true);
 }
 public Operator ReplaceOperator(Operator oldOp, Operator op)
 {
     for (int i = 0; i < this._numOps; i++)
     {
         if (this.ops[i] == oldOp)
         {
             this.ops[i] = op;
             op.SetPrecedence(oldOp.GetPrecedence());
         }
     }
     return(op);
 }
Exemple #3
0
 private bool TestLeft(Operator top, INode lhs)
 {
     if ((this.mode & 1) == 0)
     {
         if (!(lhs is ASTOpNode))
         {
             return(false);
         }
         Operator @operator = ((ASTOpNode)lhs).GetOperator();
         if (top == @operator)
         {
             if (top.IsLeftBinding() && top.IsAssociative())
             {
                 return(false);
             }
             if (top.UseBindingForPrint())
             {
                 return(false);
             }
             return(true);
         }
         if (top.GetPrecedence() == @operator.GetPrecedence())
         {
             if (@operator.IsLeftBinding() && @operator.IsAssociative())
             {
                 return(false);
             }
             if (@operator.UseBindingForPrint())
             {
                 return(false);
             }
             return(true);
         }
         if (top.GetPrecedence() > @operator.GetPrecedence())
         {
             return(false);
         }
     }
     return(true);
 }
        public Operator InsertOperator(int key, Operator op, Operator existingOp)
        {
            this.AddOperator(key, op);
            int precedence = existingOp.GetPrecedence();

            for (int i = 0; i < this.ops.Length; i++)
            {
                if ((this.ops[i] != null) && (this.ops[i].GetPrecedence() >= precedence))
                {
                    this.ops[i].SetPrecedence(this.ops[i].GetPrecedence() + 1);
                }
            }
            op.SetPrecedence(precedence);
            return(op);
        }
        public Operator AppendOperator(int key, Operator op, Operator existingOp)
        {
            this.AddOperator(key, op);
            int i = existingOp.GetPrecedence() + 1;

            for (int j = 0; j < this.ops.Length; j++)
            {
                if ((this.ops[j] != null) && (this.ops[j].GetPrecedence() >= i))
                {
                    this.ops[j].SetPrecedence(this.ops[j].GetPrecedence() + 1);
                }
            }
            op.SetPrecedence(i);
            return(op);
        }
Exemple #6
0
 private bool TestMid(Operator top, INode rhs)
 {
     if ((this.mode & 1) == 0)
     {
         if (!(rhs is ASTOpNode))
         {
             return(false);
         }
         Operator @operator = ((ASTOpNode)rhs).GetOperator();
         if (top == @operator)
         {
             return(false);
         }
         if (top.GetPrecedence() == @operator.GetPrecedence())
         {
             return(false);
         }
         if (top.GetPrecedence() > @operator.GetPrecedence())
         {
             return(false);
         }
     }
     return(true);
 }
 public Operator AddOperator(Operator op, Operator existingOp)
 {
     this.AddOperator(this.NumOps, op);
     op.SetPrecedence(existingOp.GetPrecedence());
     return(op);
 }
 public Operator AddOperator(int key, Operator op, Operator existingOp)
 {
     this.AddOperator(key, op);
     op.SetPrecedence(existingOp.GetPrecedence());
     return(op);
 }