Ejemplo n.º 1
0
        bool ParseDecrementExpression(out DecrementExpression decrementExpression)
        {
            decrementExpression = new DecrementExpression();

            if (tokenReader.Expect(LexKind.Identifier))
            {
                if (tokenReader.Expect(LexKind.Sub, 1))
                {
                    if (tokenReader.Expect(LexKind.Sub, 2))
                    {
                        decrementExpression.Name    = tokenReader.Peek().Value;
                        decrementExpression.FixType = FixType.PostFix;
                        tokenReader.Skip(3);

                        return(true);
                    }
                }
            }

            if (tokenReader.Expect(LexKind.Sub))
            {
                if (tokenReader.Expect(LexKind.Sub, 1))
                {
                    if (tokenReader.Expect(LexKind.Identifier, 2))
                    {
                        decrementExpression.Name    = tokenReader.Peek(2).Value;
                        decrementExpression.FixType = FixType.PreFix;
                        tokenReader.Skip(3);

                        return(true);
                    }
                }
            }

            return(false);
        }
        /// <summary>
        /// Reads a primary decrement expression.
        /// </summary>
        /// <param name="leftHandSide">The expression on the left hand side of the operator.</param>
        /// <param name="previousPrecedence">The precedence of the expression just before this one.</param>
        /// <returns>Returns the expression.</returns>
        private DecrementExpression GetPrimaryDecrementExpression(
            Expression leftHandSide, ExpressionPrecedence previousPrecedence)
        {
            Param.AssertNotNull(leftHandSide, "leftHandSide");
            Param.Ignore(previousPrecedence);

            DecrementExpression expression = null;

            // Check the previous precedence to see if we are allowed to gather up the as expression.
            if (this.CheckPrecedence(previousPrecedence, ExpressionPrecedence.Primary))
            {
                // Make sure the left hand side has at least one token.
                Debug.Assert(leftHandSide.Tokens.First != null, "The left hand side should not be empty");

                // Get the decrement symbol.
                this.tokens.Add(this.GetOperatorToken(OperatorType.Decrement));
                
                // Create the partial token list for the expression.
                CsTokenList partialTokens = new CsTokenList(this.tokens, leftHandSide.Tokens.First, this.tokens.Last);

                // Create and return the expression.
                expression = new DecrementExpression(partialTokens, leftHandSide, DecrementExpression.DecrementType.Postfix);
            }

            return expression;
        }