Esempio n. 1
0
    private static void TestRange(RegexContext context, SequenceBuffer <char> buffer)
    {
        var backtrackState = new BacktrackState(true, context.CurrentState);
        int j = 0;

        while (true)
        {
            if (buffer.IsPastEnd(context.Index))
            {
                backtrackState.AddZeroConsumed();
                context.Push(backtrackState);
                context.MoveToNextState();
                break;
            }

            var(matches, consumed) = MatchStateHere(context.CurrentState, buffer, context.Index);
            if (!matches || consumed == 0)
            {
                backtrackState.AddZeroConsumed();
                context.Push(backtrackState);
                context.MoveToNextState();
                break;
            }

            backtrackState.AddConsumption(consumed);
            context.AdvanceIndex(consumed);
            j++;
            if (j >= context.CurrentState.Maximum)
            {
                context.MoveToNextState();
                break;
            }
        }
    }
Esempio n. 2
0
 public void Push(BacktrackState backtrackState)
 {
     _backtrackStack.Push(backtrackState);
 }