protected override Range <UInt32> VisitAny(Any any, LengthCalculatorOptions argument) =>
 protected override Range <UInt32> VisitCharacterRange(CharacterRange characterRange, LengthCalculatorOptions argument) =>
            protected override Range <UInt32> VisitAlternation(Alternation <Char> alternation, LengthCalculatorOptions argument)
            {
                IEnumerable <Range <UInt32> > ranges =
                    alternation.GrammarNodes.Select(node => this.Visit(node, argument));

                return(new Range <UInt32>(ranges.Min(r => r.Start), ranges.Max(r => r.End)));
            }