예제 #1
0
        /// <summary>
        ///     Performs "RepeatEvery" specific operations.
        /// </summary>
        /// <param name="node">The RepeatEvery node.</param>
        public virtual void Visit(RepeatEveryNode node)
        {
            switch (node.DatePart)
            {
            case PartOfDate.Seconds:
                _generateNext = datetime => datetime.AddSeconds(node.Value);
                break;

            case PartOfDate.Minutes:
                _generateNext = datetime => datetime.AddMinutes(node.Value);
                break;

            case PartOfDate.Hours:
                _generateNext = datetime => datetime.AddHours(node.Value);
                break;

            case PartOfDate.DaysOfMonth:
                _generateNext = datetime => datetime.AddDays(node.Value);
                break;

            case PartOfDate.Months:
                _generateNext = datetime => datetime.AddMonths(node.Value);
                break;

            case PartOfDate.Years:
                _generateNext = datetime => datetime.AddYears(node.Value);
                break;
            }
            _partOfDate = node.DatePart;
        }
예제 #2
0
        private RdlSyntaxNode ComposeRepeat()
        {
            RepeatEveryNode node   = null;
            var             repeat = Last;

            switch (Current.TokenType)
            {
            case StatementType.Every:
                var every = Current;
                Consume(StatementType.Every);
                if (Current.TokenType == StatementType.Numeric)
                {
                    var numeric = Current;
                    Consume(StatementType.Numeric);
                    node = new NumericConsequentRepeatEveryNode(
                        new Token("repeat every", StatementType.Repeat,
                                  new TQL.Core.Tokens.TextSpan(repeat.Span.Start, Current.Span.End - repeat.Span.Start)),
                        numeric as NumericToken,
                        Current as WordToken);
                }
                else
                {
                    node = new RepeatEveryNode(Last, Current);
                }
                Consume(Current.TokenType);
                break;

            default:
                node = new RepeatEveryNode(repeat, Current);
                break;
            }
            return(node);
        }
예제 #3
0
 public override void Visit(RepeatEveryNode node)
 {
     try
     {
         if (node.DatePart == PartOfDate.Unknown)
         {
             ReportUnknownRepeatEveryDatePartFraction(node);
         }
     }
     catch (Exception e)
     {
         _criticalErrors.Add(e);
     }
 }
예제 #4
0
 /// <summary>
 ///     Visit RepeatEvery node.
 /// </summary>
 /// <param name="node">RepeatEvery node that will be visited.</param>
 public void Visit(RepeatEveryNode node)
 {
     node.Accept(_visitor);
 }
예제 #5
0
 private void ReportUnknownRepeatEveryDatePartFraction(RepeatEveryNode node)
 {
     AddSyntaxError(node.FullSpan,
                    string.Format(AnalysisMessage.RepeateEveryContainsUnknownDatePartFraction, node.Token.Value),
                    SyntaxErrorKind.WrongKeyword);
 }
예제 #6
0
 public override void Visit(RepeatEveryNode node) => ProduceDebuggerInstructions(node, n => base.Visit(n));
예제 #7
0
 /// <summary>
 ///     Visit RepeatEvery node.
 /// </summary>
 /// <param name="node">Where node of AST</param>
 public abstract void Visit(RepeatEveryNode node);
예제 #8
0
 public void Visit(RepeatEveryNode node)
 {
 }