public void EnterSequenceNumberField(List <Token> seqNumField)
        {
            DeleteDirective deleteDirective = (DeleteDirective)CompilerDirective;

            bool isFirst  = true;
            int  previous = -42;

            foreach (Token integerLiteralToken in seqNumField)
            {
                System.Diagnostics.Debug.Assert(integerLiteralToken.TokenType == TokenType.IntegerLiteral);
                int current = (int)((IntegerLiteralTokenValue)integerLiteralToken.LiteralValue).Number;

                if (isFirst)
                {
                    previous = current;
                    isFirst  = false;
                }
                else
                {
                    DeleteDirective.SequenceNumberRange range = new DeleteDirective.SequenceNumberRange();
                    range.From = previous;
                    if (current < 0)
                    {
                        range.To = -current;
                        isFirst  = true;
                    }
                    else
                    {
                        range.To = previous;
                        previous = current;
                    }
                    deleteDirective.SequenceNumberRangesList.Add(range);
                }
            }
            if (!isFirst && previous >= 0)
            {
                DeleteDirective.SequenceNumberRange range = new DeleteDirective.SequenceNumberRange();
                range.From = previous;
                range.To   = previous;
                deleteDirective.SequenceNumberRangesList.Add(range);
            }
        }
Beispiel #2
0
        public override void EnterSequenceNumberField(CobolCompilerDirectivesParser.SequenceNumberFieldContext context)
        {
            DeleteDirective deleteDirective = (DeleteDirective)CompilerDirective;

            bool isFirst  = true;
            int  previous = -42;

            foreach (ITerminalNode node in context.IntegerLiteral())
            {
                int current = (int)ParseTreeUtils.GetIntegerLiteral(node);
                if (isFirst)
                {
                    previous = current;
                    isFirst  = false;
                }
                else
                {
                    DeleteDirective.SequenceNumberRange range = new DeleteDirective.SequenceNumberRange();
                    range.From = previous;
                    if (current < 0)
                    {
                        range.To = -current;
                        isFirst  = true;
                    }
                    else
                    {
                        range.To = previous;
                        previous = current;
                    }
                    deleteDirective.SequenceNumberRangesList.Add(range);
                }
            }
            if (!isFirst && previous >= 0)
            {
                DeleteDirective.SequenceNumberRange range = new DeleteDirective.SequenceNumberRange();
                range.From = previous;
                range.To   = previous;
                deleteDirective.SequenceNumberRangesList.Add(range);
            }
        }