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