public override RevRegExData VisitRangeStartEnd(RevRegExParser.RangeStartEndContext context)
        {
            var start = (Visit(context.startchar) as RevRegExDataChar).Value;
            var end   = (Visit(context.endchar) as RevRegExDataChar).Value;

            if (start > end)
            {
                var tmp = start;
                start = end;
                end   = tmp;
            }
            var chars = new List <RevRegExDataChar>();

            for (var ch = start; ch <= end; ++ch)
            {
                chars.Add(new RevRegExDataChar(ch));
            }
            return(RevRegExDataJoin.Create(chars));
        }
        public override RevRegExData VisitRange(RevRegExParser.RangeContext context)
        {
            var list = new List <RevRegExDataChar>();

            if (context.HYPHEN() != null)
            {
                list.Add(new RevRegExDataChar('-'));
            }
            foreach (var item in context.rangeItem().Select(item => Visit(item)))
            {
                if (item is RevRegExDataChar)
                {
                    list.Add(item as RevRegExDataChar);
                }
                if (item is RevRegExDataJoin)
                {
                    list.AddRange((item as RevRegExDataJoin).List.Cast <RevRegExDataChar>());
                }
            }
            return(RevRegExDataJoin.Create(list));
        }
 public override RevRegExData VisitItems(RevRegExParser.ItemsContext context) => RevRegExDataJoin.Create(context.itemsList().Select(item => Visit(item)).ToList());