public override IEnumerable <ExpressionResult> RunInternal(ExpressionContext context)
    {
        if (!context.Local.Consuming)
        {
            throw new InvalidOperationException("Character classes cannot be used without input.");
        }

        if (context.Local.IsAtEnd)
        {
            yield break;
        }

        var c = context.Local.Input[context.Local.Index];

        if (CharacterClass.Accepts(c))
        {
            context.Consume(1);
            context.Produce(c.ToString());
            yield return(new(c.ToString()));

            context.Unproduce();
            context.Unconsume(1);
        }
    }