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; }