예제 #1
0
        private IntegerValueNode ParseIntegerValue(ExpressionType expressionType)
        {
            var val = new IntegerValueNode();

            if (IsNext(TokenType.PositiveInteger))
            {
                // positive integer is valid for anything
                var tok = Advance();
                val.AddToken(tok);
                val.Value = int.Parse(tok.Value);
            }
            else if (IsNext(TokenType.NegativeInteger))
            {
                if (expressionType != ExpressionType.DaysOfMonth)
                {
                    throw new SchyntaxParseException("Negative values are only allowed in dayofmonth expressions.", Input, Peek().Index);
                }

                var tok = Advance();
                val.AddToken(tok);
                val.Value = int.Parse(tok.Value);
            }
            else if (IsNext(TokenType.DayLiteral))
            {
                var tok = Advance();
                val.AddToken(tok);
                val.Value = DayToInteger(tok.Value);
            }
            else
            {
                switch (expressionType)
                {
                case ExpressionType.DaysOfMonth:
                    throw WrongTokenException(TokenType.PositiveInteger, TokenType.NegativeInteger);

                case ExpressionType.DaysOfWeek:
                    throw WrongTokenException(TokenType.PositiveInteger, TokenType.DayLiteral);

                default:
                    throw WrongTokenException(TokenType.PositiveInteger);
                }
            }

            return(val);
        }
예제 #2
0
        private IntegerValueNode ParseIntegerValue(ExpressionType expressionType)
        {
            var val = new IntegerValueNode();

            if (IsNext(TokenType.PositiveInteger))
            {
                // positive integer is valid for anything
                var tok = Advance();
                val.AddToken(tok);

                int ival;
                if (!int.TryParse(tok.Value, out ival))
                {
                    throw new SchyntaxParseException("Integer value is too large.", Input, tok.Index);
                }

                val.Value = ival;
            }
            else if (IsNext(TokenType.NegativeInteger))
            {
                if (expressionType != ExpressionType.DaysOfMonth && expressionType != ExpressionType.DaysOfYear)
                {
                    throw new SchyntaxParseException("Negative values are only allowed in dayofmonth and dayofyear expressions.", Input, Peek().Index);
                }

                var tok = Advance();
                val.AddToken(tok);

                int ival;
                if (!int.TryParse(tok.Value, out ival))
                {
                    throw new SchyntaxParseException("Integer value is too small.", Input, tok.Index);
                }

                val.Value = int.Parse(tok.Value);
            }
            else if (IsNext(TokenType.DayLiteral))
            {
                if (expressionType != ExpressionType.DaysOfWeek)
                {
                    throw new SchyntaxParseException("Unexpected day literal. Day literals are only allowed in daysOfWeek expressions.", Input, Peek().Index);
                }

                var tok = Advance();
                val.AddToken(tok);
                val.Value = DayToInteger(tok.Value);
            }
            else
            {
                switch (expressionType)
                {
                case ExpressionType.DaysOfYear:
                case ExpressionType.DaysOfMonth:
                    throw WrongTokenException(TokenType.PositiveInteger, TokenType.NegativeInteger);

                case ExpressionType.DaysOfWeek:
                    throw WrongTokenException(TokenType.PositiveInteger, TokenType.DayLiteral);

                default:
                    throw WrongTokenException(TokenType.PositiveInteger);
                }
            }

            return(val);
        }
예제 #3
0
        private IntegerValueNode ParseIntegerValue(ExpressionType expressionType)
        {
            var val = new IntegerValueNode();

            if (IsNext(TokenType.PositiveInteger))
            {
                // positive integer is valid for anything
                var tok = Advance();
                val.AddToken(tok);
                val.Value = int.Parse(tok.Value);
            }
            else if (IsNext(TokenType.NegativeInteger))
            {
                if (expressionType != ExpressionType.DaysOfMonth)
                {
                    throw new SchyntaxParseException("Negative values are only allowed in dayofmonth expressions.", Input, Peek().Index);
                }

                var tok = Advance();
                val.AddToken(tok);
                val.Value = int.Parse(tok.Value);
            }
            else if (IsNext(TokenType.DayLiteral))
            {
                var tok = Advance();
                val.AddToken(tok);
                val.Value = DayToInteger(tok.Value);
            }
            else
            {
                switch (expressionType)
                {
                    case ExpressionType.DaysOfMonth:
                        throw WrongTokenException(TokenType.PositiveInteger, TokenType.NegativeInteger);
                    case ExpressionType.DaysOfWeek:
                        throw WrongTokenException(TokenType.PositiveInteger, TokenType.DayLiteral);
                    default:
                        throw WrongTokenException(TokenType.PositiveInteger);
                }
            }

            return val;
        }
예제 #4
0
        private IntegerValueNode ParseIntegerValue(ExpressionType expressionType)
        {
            var val = new IntegerValueNode();

            if (IsNext(TokenType.PositiveInteger))
            {
                // positive integer is valid for anything
                var tok = Advance();
                val.AddToken(tok);

                int ival;
                if (!int.TryParse(tok.Value, out ival))
                    throw new SchyntaxParseException("Integer value is too large.", Input, tok.Index);

                val.Value = ival;
            }
            else if (IsNext(TokenType.NegativeInteger))
            {
                if (expressionType != ExpressionType.DaysOfMonth && expressionType != ExpressionType.DaysOfYear)
                {
                    throw new SchyntaxParseException("Negative values are only allowed in dayofmonth and dayofyear expressions.", Input, Peek().Index);
                }

                var tok = Advance();
                val.AddToken(tok);

                int ival;
                if (!int.TryParse(tok.Value, out ival))
                    throw new SchyntaxParseException("Integer value is too small.", Input, tok.Index);

                val.Value = int.Parse(tok.Value);
            }
            else if (IsNext(TokenType.DayLiteral))
            {
                if (expressionType != ExpressionType.DaysOfWeek)
                    throw new SchyntaxParseException("Unexpected day literal. Day literals are only allowed in daysOfWeek expressions.", Input, Peek().Index);

                var tok = Advance();
                val.AddToken(tok);
                val.Value = DayToInteger(tok.Value);
            }
            else
            {
                switch (expressionType)
                {
                    case ExpressionType.DaysOfYear:
                    case ExpressionType.DaysOfMonth:
                        throw WrongTokenException(TokenType.PositiveInteger, TokenType.NegativeInteger);
                    case ExpressionType.DaysOfWeek:
                        throw WrongTokenException(TokenType.PositiveInteger, TokenType.DayLiteral);
                    default:
                        throw WrongTokenException(TokenType.PositiveInteger);
                }
            }

            return val;
        }