Пример #1
0
        private static bool NeedsParens(AstNode node, JSToken refToken)
        {
            bool needsParens = false;

            // assignments and commas are the only operators that need parens
            // around them. Conditional is pretty low down the list
            BinaryOperator binaryOp = node as BinaryOperator;

            if (binaryOp != null)
            {
                OpPrec thisPrecedence = JSScanner.GetOperatorPrecedence(refToken);
                OpPrec nodePrecedence = JSScanner.GetOperatorPrecedence(binaryOp.OperatorToken);
                needsParens = (nodePrecedence < thisPrecedence);
            }

            return(needsParens);
        }
Пример #2
0
        private static OpPrec[] InitOperatorsPrec()
        {
            OpPrec[] operatorsPrec = new OpPrec[JSToken.LastOperator - JSToken.FirstBinaryOperator + 1];

            operatorsPrec[JSToken.Plus - JSToken.FirstBinaryOperator] = OpPrec.precAdditive;
            operatorsPrec[JSToken.Minus - JSToken.FirstBinaryOperator] = OpPrec.precAdditive;

            operatorsPrec[JSToken.LogicalOr - JSToken.FirstBinaryOperator] = OpPrec.precLogicalOr;
            operatorsPrec[JSToken.LogicalAnd - JSToken.FirstBinaryOperator] = OpPrec.precLogicalAnd;
            operatorsPrec[JSToken.BitwiseOr - JSToken.FirstBinaryOperator] = OpPrec.precBitwiseOr;
            operatorsPrec[JSToken.BitwiseXor - JSToken.FirstBinaryOperator] = OpPrec.precBitwiseXor;
            operatorsPrec[JSToken.BitwiseAnd - JSToken.FirstBinaryOperator] = OpPrec.precBitwiseAnd;

            operatorsPrec[JSToken.Equal - JSToken.FirstBinaryOperator] = OpPrec.precEquality;
            operatorsPrec[JSToken.NotEqual - JSToken.FirstBinaryOperator] = OpPrec.precEquality;
            operatorsPrec[JSToken.StrictEqual - JSToken.FirstBinaryOperator] = OpPrec.precEquality;
            operatorsPrec[JSToken.StrictNotEqual - JSToken.FirstBinaryOperator] = OpPrec.precEquality;

            operatorsPrec[JSToken.InstanceOf - JSToken.FirstBinaryOperator] = OpPrec.precRelational;
            operatorsPrec[JSToken.In - JSToken.FirstBinaryOperator] = OpPrec.precRelational;
            operatorsPrec[JSToken.GreaterThan - JSToken.FirstBinaryOperator] = OpPrec.precRelational;
            operatorsPrec[JSToken.LessThan - JSToken.FirstBinaryOperator] = OpPrec.precRelational;
            operatorsPrec[JSToken.LessThanEqual - JSToken.FirstBinaryOperator] = OpPrec.precRelational;
            operatorsPrec[JSToken.GreaterThanEqual - JSToken.FirstBinaryOperator] = OpPrec.precRelational;

            operatorsPrec[JSToken.LeftShift - JSToken.FirstBinaryOperator] = OpPrec.precShift;
            operatorsPrec[JSToken.RightShift - JSToken.FirstBinaryOperator] = OpPrec.precShift;
            operatorsPrec[JSToken.UnsignedRightShift - JSToken.FirstBinaryOperator] = OpPrec.precShift;

            operatorsPrec[JSToken.Multiply - JSToken.FirstBinaryOperator] = OpPrec.precMultiplicative;
            operatorsPrec[JSToken.Divide - JSToken.FirstBinaryOperator] = OpPrec.precMultiplicative;
            operatorsPrec[JSToken.Modulo - JSToken.FirstBinaryOperator] = OpPrec.precMultiplicative;

            operatorsPrec[JSToken.Assign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.PlusAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.MinusAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.MultiplyAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.DivideAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.BitwiseAndAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.BitwiseOrAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.BitwiseXorAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.ModuloAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.LeftShiftAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.RightShiftAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;
            operatorsPrec[JSToken.UnsignedRightShiftAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment;

            operatorsPrec[JSToken.ConditionalIf - JSToken.FirstBinaryOperator] = OpPrec.precConditional;
            operatorsPrec[JSToken.Colon - JSToken.FirstBinaryOperator] = OpPrec.precConditional;

            operatorsPrec[JSToken.Comma - JSToken.FirstBinaryOperator] = OpPrec.precComma;

            return operatorsPrec;
        }
Пример #3
0
      private static OpPrec[] InitPPOperatorsPrec() {
        OpPrec[] operatorsPrec = new OpPrec[JSToken.LastPPOperator - JSToken.FirstBinaryOp + 1];

        operatorsPrec[JSToken.Plus - JSToken.FirstBinaryOp] = OpPrec.precAdditive;
        operatorsPrec[JSToken.Minus - JSToken.FirstBinaryOp] = OpPrec.precAdditive;

        operatorsPrec[JSToken.LogicalOr - JSToken.FirstBinaryOp] = OpPrec.precLogicalOr;
        operatorsPrec[JSToken.LogicalAnd - JSToken.FirstBinaryOp] = OpPrec.precLogicalAnd;
        operatorsPrec[JSToken.BitwiseOr - JSToken.FirstBinaryOp] = OpPrec.precBitwiseOr;
        operatorsPrec[JSToken.BitwiseXor - JSToken.FirstBinaryOp] = OpPrec.precBitwiseXor;
        operatorsPrec[JSToken.BitwiseAnd - JSToken.FirstBinaryOp] = OpPrec.precBitwiseAnd;

        operatorsPrec[JSToken.Equal - JSToken.FirstBinaryOp] = OpPrec.precEquality;
        operatorsPrec[JSToken.NotEqual - JSToken.FirstBinaryOp] = OpPrec.precEquality;
        operatorsPrec[JSToken.StrictEqual - JSToken.FirstBinaryOp] = OpPrec.precEquality;
        operatorsPrec[JSToken.StrictNotEqual - JSToken.FirstBinaryOp] = OpPrec.precEquality;

        operatorsPrec[JSToken.GreaterThan - JSToken.FirstBinaryOp] = OpPrec.precRelational;
        operatorsPrec[JSToken.LessThan - JSToken.FirstBinaryOp] = OpPrec.precRelational;
        operatorsPrec[JSToken.LessThanEqual - JSToken.FirstBinaryOp] = OpPrec.precRelational;
        operatorsPrec[JSToken.GreaterThanEqual - JSToken.FirstBinaryOp] = OpPrec.precRelational;

        operatorsPrec[JSToken.LeftShift - JSToken.FirstBinaryOp] = OpPrec.precShift;
        operatorsPrec[JSToken.RightShift - JSToken.FirstBinaryOp] = OpPrec.precShift;
        operatorsPrec[JSToken.UnsignedRightShift - JSToken.FirstBinaryOp] = OpPrec.precShift;

        operatorsPrec[JSToken.Multiply - JSToken.FirstBinaryOp] = OpPrec.precMultiplicative;
        operatorsPrec[JSToken.Divide - JSToken.FirstBinaryOp] = OpPrec.precMultiplicative;
        operatorsPrec[JSToken.Modulo - JSToken.FirstBinaryOp] = OpPrec.precMultiplicative;

        return operatorsPrec;
      }
Пример #4
0
 internal OpListItem(JSToken op, OpPrec prec, OpListItem prev)
 {
     this._prev     = prev;
     this._operator = op;
     this._prec     = prec;
 }
 private static OpPrec[] InitOperatorsPrec()
 {
     OpPrec[] precArray = new OpPrec[0x24];
     precArray[0] = OpPrec.precAdditive;
     precArray[1] = OpPrec.precAdditive;
     precArray[2] = OpPrec.precLogicalOr;
     precArray[3] = OpPrec.precLogicalAnd;
     precArray[4] = OpPrec.precBitwiseOr;
     precArray[5] = OpPrec.precBitwiseXor;
     precArray[6] = OpPrec.precBitwiseAnd;
     precArray[7] = OpPrec.precEquality;
     precArray[8] = OpPrec.precEquality;
     precArray[9] = OpPrec.precEquality;
     precArray[10] = OpPrec.precEquality;
     precArray[0x15] = OpPrec.precRelational;
     precArray[0x16] = OpPrec.precRelational;
     precArray[11] = OpPrec.precRelational;
     precArray[12] = OpPrec.precRelational;
     precArray[13] = OpPrec.precRelational;
     precArray[14] = OpPrec.precRelational;
     precArray[15] = OpPrec.precShift;
     precArray[0x10] = OpPrec.precShift;
     precArray[0x11] = OpPrec.precShift;
     precArray[0x12] = OpPrec.precMultiplicative;
     precArray[0x13] = OpPrec.precMultiplicative;
     precArray[20] = OpPrec.precMultiplicative;
     precArray[0x17] = OpPrec.precAssignment;
     precArray[0x18] = OpPrec.precAssignment;
     precArray[0x19] = OpPrec.precAssignment;
     precArray[0x1a] = OpPrec.precAssignment;
     precArray[0x1b] = OpPrec.precAssignment;
     precArray[0x1c] = OpPrec.precAssignment;
     precArray[0x1d] = OpPrec.precAssignment;
     precArray[30] = OpPrec.precAssignment;
     precArray[0x1f] = OpPrec.precAssignment;
     precArray[0x20] = OpPrec.precAssignment;
     precArray[0x21] = OpPrec.precAssignment;
     precArray[0x22] = OpPrec.precAssignment;
     precArray[0x23] = OpPrec.precConditional;
     return precArray;
 }
Пример #6
0
      //internal OpAssoc _assoc;

      internal OpListItem(JSToken op, OpPrec prec, /*OpAssoc assoc,*/ OpListItem prev){
        _prev = prev;
        _operator = op;
        _prec = prec;
        //_assoc = assoc;
      }
 internal OpListItem(JSToken op, OpPrec prec, OpListItem prev)
 {
     this._prev = prev;
     this._operator = op;
     this._prec = prec;
 }