Ejemplo n.º 1
0
        void IncrGAnalysisListener.OnMatch(GAnlysInput nextInput, AfterMatchListener afterListener, AlternativeIncrGAnalyzer alternative)
        {
            List <IndexedAfterMatchListener> updatedMatches = new List <IndexedAfterMatchListener>(previoudMatches);

            updatedMatches.Add(new IndexedAfterMatchListener(nextIndex - 1, afterListener));
            if (nextIndex < analyzers.Count)
            {
                var recordingListener = new RecordingIncrGAnalysListener {
                    baseListener = new ChainListenerOld {
                        analyzers = analyzers, nextIndex = nextIndex + 1, rootListener = rootListener, previoudMatches = updatedMatches, afterListenerFactory = afterListenerFactory
                    }
                };
                analyzers[nextIndex].Analyze(nextInput, recordingListener);
                if (!recordingListener.didMatch && alternative != null)
                {
                    updatedMatches.RemoveAt(updatedMatches.Count - 1);
                    AlternativeIncrGAnalyzer currentAlternative = alternative;
                    var altListener = new ChainListenerOld {
                        analyzers = analyzers, nextIndex = nextIndex, rootListener = rootListener, previoudMatches = updatedMatches, afterListenerFactory = afterListenerFactory
                    };
                    alternative.AnalyzeAgain(altListener);
                }
            }
            else
            {
                //rootListener.OnMatch(nextInput, new ClusterAfterListener { afterListeners = updatedMatches });
                rootListener.OnMatch(nextInput, afterListenerFactory(updatedMatches), alternative);
            }
        }
Ejemplo n.º 2
0
        void IncrementalGAnalyzer.Analyze(GAnlysInput input, IncrGAnalysisListener listener)
        {
            var recLis = new RecordingIncrGAnalysListener {
                baseListener = listener
            };

            baseAnalyzer.Analyze(input, recLis);
            if (!recLis.didMatch)
            {
                listener.OnMatch(input, StbAfterLis.instance);
            }
        }