private bool Validate()

in Microsoft.Azure.Cosmos/src/Query/Core/Parser/LASets.cs [608:735]


        private bool Validate(List<Edge> parse, List<IToken> i)
        {
            List<Edge> q = parse.ToList();
            q.Reverse();
            List<IToken>.Enumerator ei = this.input.GetEnumerator();
            List<Edge>.Enumerator eq = q.GetEnumerator();
            bool fei = false;
            bool feq = false;
            for (; ; )
            {
                fei = ei.MoveNext();
                IToken v = ei.Current;
                if (!fei)
                {
                    break;
                }

                bool empty = true;
                for (; empty;)
                {
                    feq = eq.MoveNext();
                    if (!feq)
                    {
                        break;
                    }

                    Edge x = eq.Current;
                    switch (x.type)
                    {
                        case TransitionType.RULE:
                            empty = true;
                            break;
                        case TransitionType.PREDICATE:
                            empty = true;
                            break;
                        case TransitionType.ACTION:
                            empty = true;
                            break;
                        case TransitionType.ATOM:
                            empty = false;
                            break;
                        case TransitionType.EPSILON:
                            empty = true;
                            break;
                        case TransitionType.INVALID:
                            empty = true;
                            break;
                        case TransitionType.NOT_SET:
                            empty = false;
                            break;
                        case TransitionType.PRECEDENCE:
                            empty = true;
                            break;
                        case TransitionType.SET:
                            empty = false;
                            break;
                        case TransitionType.WILDCARD:
                            empty = false;
                            break;
                        default:
                            throw new Exception();
                    }
                }
                Edge w = eq.Current;
                if (w == null && v == null)
                {
                    return true;
                }
                else if (w == null)
                {
                    return false;
                }
                else if (v == null)
                {
                    return false;
                }

                switch (w.type)
                {
                    case TransitionType.ATOM:
                        {
                            IntervalSet set = w.label;
                            if (set != null && set.Count > 0)
                            {
                                if (!set.Contains(v.Type))
                                {
                                    return false;
                                }
                            }
                            break;
                        }

                    case TransitionType.NOT_SET:
                        {
                            IntervalSet set = w.label;
                            set = set.Complement(IntervalSet.Of(TokenConstants.MinUserTokenType, this.parser.Atn.maxTokenType));
                            if (set != null && set.Count > 0)
                            {
                                if (!set.Contains(v.Type))
                                {
                                    return false;
                                }
                            }
                            break;
                        }

                    case TransitionType.SET:
                        {
                            IntervalSet set = w.label;
                            if (set != null && set.Count > 0)
                            {
                                if (!set.Contains(v.Type))
                                {
                                    return false;
                                }
                            }
                            break;
                        }

                    case TransitionType.WILDCARD:
                        break;

                    default:
                        throw new Exception();
                }
            }
            return true;
        }